解题思路:
对于这道题,我们首先来理清一下思路。
首先,此题中鞍点的定义是在二维数组中,有一个数,它是所在行的最大值,并且是所在列的最小值。
那么我们的主体步骤就是:
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二级辅导-计负均正 (C语言代码)浏览:700 |
三角形 (C++代码)递归(存在大量重复计算,容易出现时间超限)浏览:836 |
【计算直线的交点数】 (C语言代码)浏览:1504 |
简单的a+b (C语言代码)浏览:619 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:438 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:655 |
字符逆序 (C语言代码)浏览:675 |
输入输出格式练习 (C语言代码)浏览:774 |
盐水的故事 (C语言代码)浏览:1616 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:2209 |