中国大学(mooc)第7周编程练习(鞍数)

中国大学(mooc)第7周编程练习(鞍数)(2022年)

#include<stdio.h>
int main()
{
	int a[100][100];
	int i,n,s,j,x,min,cnt=0,d,max,g=1;
	scanf("%d",&n); 
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			scanf("%d",&a[i][j]);
			cnt++;               //每输入四个数吸收一次换行符 
			if(cnt%4==0){
				getchar();
			}
		}
	}
	     i=0;
	while(i<n){      //从第0行开始寻找符合条件的数据,找到该行的最大值后,立刻判断是否为所在列的最小值。 
	  max=a[i][0];
	for(j=0;j<n;j++){
		if(a[i][j]>max){
			max=a[i][j];
			s=j;             //寻找行最大值 ,使用s保存该值得列下标。 
		}
	}
	   min=a[0][s];        //通过已找到的列下标和该行的数,寻找该列的最小值。 
	for(x=0;x<n;x++){
		if(a[x][s]<min){
			min=a[x][s];
			d=x;            //找到该行的最小值,使用d保存该值的行下标。 
		}
	}
	if(max==min){            //使用数值上的比较是最方便的,即使有同样大的数在该行或列,该点也是所在行或列的最大或最小值。 
		printf("%d %d",d,s);  //判断,如果符合要求,输出该点的行和列下标。 
		g=0;                 //找到鞍点的标志 
		break;         //根据体中要求,只存在一个鞍点,找到后,结束循环。 
	}
	  i++; //如果改行没有找到,进入下一行,重新寻找。 
	}
	if(g==1){    //如果没有找到鞍点,输出:NO。 
		printf("NO");
	}
	return 0;
 } 

其实这题更多的是在考查我门对二维数组的理解,如果行和列搞错了,这道题就会相当难,虽然代码看起来不简单,但是思路却是相当的简单,首先我们要把输入的数按照正确的方式存在数组中,所以要从第0行开始,然后一步步换行,切记要处理换行的问题。
寻找鞍数也是如此,先在第0行找最大数,然后判断是不是该列的最小值,如果是,程序结束,不是则换行开始重复上步操作,如果一直没有,则输出:NO,这一步要注意的是 如何在找到最大值的所在列找最小值,还有如何判断是否找到鞍数。
当然我也曾考虑会不会在寻找列最小值的时候遇见相同的值,导致记录错了,但是仔细想,就算有也不影响该数是所在行或列的最大或最小值。
个人见解,希望对大家有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值