原题链接:计算鞍点
解题思路:
对于这道题,我们首先来理清一下思路。
首先,此题中鞍点的定义是在二维数组中,有一个数,它是所在行的最大值,并且是所在列的最小值。
那么我们的主体步骤就是:
1、求出一行中的最大值 ;
2、求出最大值的所在列;
3、求出所在列的最小值;
4、判断是否相等。
好的,心动不如行动,我们现在开始!
第一步:求一行中的最大值
int a[5][5]; int i,j,max; //用i,j表示数组的行,列 for(i=0;i<5;i++){ max=a[i][0]; //每一行的最大值初始化为这行的第一个数 for(j=0;j<5;j++){ if(max<a[i][j]){ max=a[i][j]; //遍历这一行,找出最大值赋给max } } }
第二步:求出最大值所在列
int a[5][5]; int i,j,max,max_t; //这里我们引入一个新变量max_t用于存放最大值的列数 for(i=0;i<5;i++){ max=a[i][0]; max_t=0; //初始化为0 for(j=0;j<5;j++){ if(max<a[i][j]){ max=a[i][j]; max_t=j; //max的行数赋值给max_t } } }
第三步:判断它所在列的最小值
int min, min_t; //新建两个变量存放最小值,和最小值所在行 min=a[0][max_t]; min_t=0; //和第二步一样初始化 for(int t=0;t<5;t++){ //这里的t是列数确定之后,判断行数用的 if(min>a[t][max_t]){ min_t=t; min=a[t][max_t]; } }
第四步:判断是否相等
if(max==min){ printf("%d %d %d",min_t+1,max_t+1,max); }
注意事项:
最重要的就是怎么把这些碎片拼到一起啦!记得注意for循环的嵌套位置哦
参考代码:
#include<stdio.h> int main() { int a[5][5]; int i,j,max,min,max_t,min_t,t; int found=0; //加一个found表示是否找到鞍点,注意审题 for(i=0;i<5;i++){ //读入数据 for(j=0;j<5;j++){ scanf("%d",&a[i][j]); } } for(i=0;i<5;i++){ //从第一行开始找最大值 max=a[i][0]; max_t=0; for(j=0;j<5;j++){ if(max<a[i][j]){ max_t=j; max=a[i][j]; } } min=a[0][max_t]; //找max的所在列中的 最小值 min_t=0; for(t=0;t<5;t++){ if(min>a[t][max_t]){ min_t=t; min=a[t][max_t]; } } if(max==min){ //判断是否相等 printf("%d %d %d",min_t+1,max_t+1,max); found++; break; } } if(found==0){ printf("not found"); } return 0; }
0.0分
3 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复