慕课在二维数组找鞍点

  

 

    我的做法是利用二维数组先找一行的最大值在在最大值所在列里找最小值,如果最大值和最小值相同则满足鞍点定义,这个程序虽然可以通过慕课的样例但是有一个 bug就是出现 

2

2 2

2 2

时并不能输出所有点希望大佬指教。

#include<stdio.h>
int main()
{
	int n;
	scanf("%d",&n);
	int a[n][n];
	for(int i=0;i<n;i++)
	{   
		for(int j=0;j<n;j++)
		scanf("%d",&a[i][j]);	
	}
	//输入 
	int judge=0,x=0;
	for(int I=0;I<n;)
	{   
		int max=a[I][x];
	    for(int J=x+1;J<n;J++)
	    {
	    	if(a[I][J]>max)
				max=a[I][J];
		}
		//判断一行最大 
		for(;max!=a[I][x]&&x<n;) x++;
		//找到最大一行所在列 
		int min=a[0][x];
		for(int o=1;o<n;o++)
		{
			if(a[o][x]<min) min=a[o][x];
		}
		//判断该最大的一列的最小 
		if(max==min) 
		{
			judge=1;
			printf("%d %d",I,x);
		}
		int judge_1=0; 
		 if(x<n) x++; 
		for(int h=++x;h<n;h++)
		{
			if(a[I][h]==a[I][x])
				judge_1=1;
		}
		//一行有相同最大值时 
		if(judge_1==0) 
		{
			I++;
			x=0;
		} 
	}
	if(judge==0) printf("NO");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值