二维数组的鞍点

以此题为例,题目内容:

从键盘上输入4*5的二维数组的元素,查找这个数组是否有鞍点。
若存在鞍点,则输出鞍点的值及它的行列下标,若没有鞍点则输出 No

二维数组鞍点的定义:存在一个二维数组a[n][m],有一个元素a[i][j],在i行中它是最大的元素,在j列中它是最小的元素,则认为a[i][j],关于二维数组中的鞍点的个数的问题,未找到准确的定义,一个二维数组最多只有一个鞍点。(就是说先找到数组一行中最大的数,然后将这个行最大数跟它同列的数进行比较,若它在其所在行中最大而在其所在列中最小,那它就是这个二维数组的鞍点😉)

例:
(1)输入:
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
输出:a[0][4]=5
(2)输入:
1 2 3 4 11
2 4 6 8 12
3 6 9 10 15
4 8 12 16 7
输出:No

直接上代码

#include<stdio.h>
#define N 4 //初始化定义,跟赋值差不多
#define M 5 //但它可是很专一的!!!
int main()
{ 
int i,j;
int max,jmax;//max用来代表行最大数,jmax来记录数据的列角标
int z=1;//判断二维数组是否有鞍点
int f;//判断行最大数是否是该列的列最小数 
int a[N][M];//定义二维数组 v( ̄︶ ̄)↗ 
for(i=0;i<N;i++) //i表示行数,i=0表示第一行
 for(j=0;j<M;j++)//j表示列数,j=0表示第一列
 scanf("%d",&a[i][j]);//键盘输入二维数组
 for(i=0;i<N;i++) //i表示行数,i=0表示第一行
 {max=a[i][0];//默认将每行第一列数据设为行最大数,并将其值赋给max
  jmax=0;//默认列角标为第一列
   for(j=1;j<M;j++)//默认每行第一列数据最大,且max已取其值,所以max直接与第二列比较即可
   {if(max<a[i][j])//若此行中其它列的数比max的值大,则将其的值赋给max
      {max=a[i][j];
       jmax=j;//记录行最大值的列角标
	  }
   }
   f=1;
   for(j=0;j<N;j++) //此处j与上面不一样,因为每次循环j都会重新赋值所以此处使用j表示行数无影响
   {if(a[j][jmax]<max)//如果max这个行最大数不是该列中最小的数,那么将f的值赋为0
    f=0;
   }
   if(f==1)//如果max这个行最大数是该列中最小的数,输出其在数组中的位置,和这个数
   {printf("a[%d][%d]=%d",i,jmax,max);
   z=0;//用于判断二维数组是否有鞍点
   }
 }
  if(z==1)printf("No");//用于判断二维数组是否有鞍点
return 0;
}//枭 

运行示例:

 

  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值