原题链接:计算鞍点
解题思路:
对于这道题,我们首先来理清一下思路。
首先,此题中鞍点的定义是在二维数组中,有一个数,它是所在行的最大值,并且是所在列的最小值。
那么我们的主体步骤就是:
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分
4 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复