首页 > 其他分享 >c语言中的鞍点问题(详细版)

c语言中的鞍点问题(详细版)

时间:2024-11-21 09:48:27浏览次数:3  
标签:arr 语言 flag1 int ++ flag2 详细 鞍点

1、什么是鞍点

什么是鞍点?

    鞍点鞍点,就是类似马鞍一样规律的点,即在一个矩阵中是每一行的最大值并且是每一列的最小值。 (无论多大的矩阵,如果存在鞍点,则只有一个,否则不存在鞍点,至于为啥,建议谷歌)

2、找出鞍点的思路

找出鞍点的思路 

需要我们利用枚举数组(ps:不是高深的枚举法,不要担心,因为我也不懂,简单的利用循环嵌套实现代码)来实现

(1)、枚举每一行的最大值

(2)、枚举每一列的最小值

(3)、如果找到就输出该数后直接跳出程序

(4)、否则输出NONE

3、例题展示

3、例题展示

一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。

本题要求编写程序,求一个给定的n阶方阵的鞍点的行列值。

输入格式:

输入第一行给出一个正整数n(1≤n≤6),随后n行,每行给出n个整数,其间以空格分隔。

输出格式:

输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。

4、代码实现

 首先经典开头直接输入,无需多言

#include<stdio.h>
int main()
{
    int n,flag1,flag2;
    int arr[100][100];
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    { 
        for(int j=0;j<n;j++)
        { 
            scanf("%d",&arr[i][j]);
        }
    }
}

接着就是整个题目的重头戏——判断鞍点!!!

先利用一层循环对行进行控制,再循环一层对列进行控制,再嵌套一层用于对比,类似于图示

0392e2d7a717496fbc951da642d9bc6c.jpeg

代码实现

通过对比数组的行列变量位置交换,实现比较,需要定义一个标志量方便判断输出

    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            flag1=1,flag2=1;//假设arr[i][j]为鞍点,每次循环都给标志变量赋初值,以便判断//
            for(k=0;k<n;k++)//利用枚举算法进行判断每行最大值//
            {
                if(arr[i][j]<arr[i][k])
                {
                    flag1=0;
                    break;
                }
            }
            for(k=0;k<n;k++)//枚举判断每列最小值//
            {
                if(arr[i][j]>arr[k][j])
                {
                    flag2=0;
                    break;
                }
            }
            

由于在各不相等的矩阵中,鞍点只有一个,所以在判断鞍点后可直接return 0,结束程序

            if(flag1&&flag2)
            {
                printf("%d %d %d",i,j,arr[i][j]);
                return 0;
            }
        }
    }
    if(flag1+flag2<2)
    {
        printf("NONE");
    }
    return 0;
}

完整代码如下

 

#include<stdio.h>
int main()
{
    int n, i, j, k, flag1, flag2;
    int arr[100][100];
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            flag1 = 1, flag2 = 1;//假设arr[i][j]为鞍点,每次循环都给标志变量赋初值,以便判断//
            for (k = 0; k < n; k++)//利用枚举算法进行判断每行最大值//
            {
                if (arr[i][j] < arr[i][k])
                {
                    flag1 = 0;
                    break;
                }
            }
            for (k = 0; k < n; k++)//枚举判断每列最小值//
            {
                if (arr[i][j] > arr[k][j])
                {
                    flag2 = 0;
                    break;
                }
            }
            if (flag1 && flag2)
            {
                printf("%d %d %d", i, j,arr[i][j]);
                return 0;
            }
        }
    }
    if (flag1 + flag2 < 2)
    {
        printf("NONE");
    }
    return 0;
}

测试样例

f2a7cd794b2243eb94be1e7a1dbb552a.png

ok,此时一道鞍点判断就做出来了,本题为n*n的矩阵,也可以通过改变矩阵规格来进行操作,主旨不变,利用数组和循环嵌套进行判断。

感谢支持,新手做的不好轻点喷~~~~ 

 

标签:arr,语言,flag1,int,++,flag2,详细,鞍点
From: https://blog.csdn.net/2402_87445758/article/details/143923188

相关文章

  • 一个牛逼的免费开源聊天系统 支持独立部署 教程详细
    什么是唐僧叨叨​唐僧叨叨是一款轻量级,高性能,重安全专注于私有化部署的开源即时通讯系统。特性​唐僧叨叨具备以下特性:......
  • 【C语言的奥秘3】C语言中的控制语句第二弹
    一、循环语句1、while循环(1)、while循环的执行流程while循环是当条件成立时进入循环体,当条件不成立则结束,不在进入到循环当中去。值得注意的是,while循环在第一次执行时,会先判断循环条件是否为真。如果条件为真,则进入循环体执行语句;如果条件为假,则跳过循环体,直接执行循环后......
  • C语言常用语句总结
    一:常用函数1、putchar函数:putchar函数(字符输出函数):向终端输出一个字符。一般形式为:        putchar(c)  //   输出字符变量c的值。        ==    printf(“%c”,c)2、getchar函数getchar函数(字符输入函数):从终端输入一个字符。getchar函数没......
  • 5.C语言数组(上)
    文章目录一、数组的概念二、一维数组的创建和初始化2.1数组的创建2.2数组的初始化2.3数组的类型三、一维数组的使用3.1数组下标3.2数组元素的打印3.3数组的输入四、一维数组在内存中的存储五、sizeof计算数组元素的个数六、二维数组的创建6.1二维数组的概念6.2......
  • C语言编程常见问题总结
    1、返回值处理①被调函数执行结果对业务有影响,调用者没有处理返回值:可能导致空指针访问、缺少回退处理(资源泄露)②处理函数的返回值不准确:返回值数据类型被错误转换,返回值比较的目标不是函数的返回值系列 2、断言的使用①在断言中包含了非逻辑表达式②对程序运行中可能发......
  • 大语言模型及其应用,学习大语言模型,收藏这一篇就够了!
    机器学习机器学习(MachineLearning,ML)是指从数据中自动学习规律和模式,并利用这些规律和模式,在新的数据中完成类似任务的技术和方法。它属于人工智能(ArtificialIntelligence)的一个分支。前排提示,文末有大模型AGI-CSDN独家资料包哦!机器学习的核心思想是使用数据来训练计算......
  • 信任的大型语言模型:通过知识库和双解码器定制和基于事实的文本生成
    在人工智能的世界中,大型语言模型(LLMs)的表现如同一位天才演员,尽管它们在内容生成方面技艺非凡,却常常因生成内容的领域限制而“演过了头”。就像《哈利·波特》中的榴莲糖,味道总是让人意外。为了让这些模型“脚踏实地”,我们需要确保其生成的内容基于一个经过验证的背景。这就......
  • 2个月搞定计算机二级C语言——真题(12)解析
    1.前言本篇我们讲解2个月搞定计算机二级C语言——真题122.程序填空题2.1题目要求2.2提供的代码#include<stdio.h>#defineN3intfun(int(*a)[N]){inti,j,m1,m2,row,colum;m1=m2=0;for(i=0;i<N;i++){j=N......
  • SQL语言_数据查询_单表查询_PAGE2
    数据查询单表查询--01.选择表中若干列SELECTSid,SnameFROMStudent--查询指定列SELECT*FROMStudent--查询全部列SELECTSid,2024-SageAS年龄FROMStudent--查询经过计算的列,并为列起别名--02.选择表中若干元组SELECTDISTINCTSageFROMStudent--去掉查询结果......
  • 【前端知识】vue路由组件vue router详细介绍
    什么是vuerouter概述VueRouter的基本工作原理代码样例及注释1.定义组件2.定义路由3.创建Vue实例并挂载路由4.在模板中使用`<router-view>`注释说明特性与关注点路由模式一、Hash模式二、History模式三、Abstract模式四、选择路由模式的建议路由Hash模式示例......