解题思路:

对于这道题,我们首先来理清一下思路。

首先,此题中鞍点的定义是在二维数组中,有一个数,它是所在行的最大值,并且是所在列的最小值。


那么我们的主体步骤就是:

      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.0分

3 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论