茜瑜


私信TA

用户名:uq_22682492264

访问量:319

签 名:

等  级
排  名 16945
经  验 798
参赛次数 0
文章发表 3
年  龄 0
在职情况 学生
学  校 江苏第二师范学院
专  业 物联网工程

  自我简介:

解题思路:

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

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


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

      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 人评分

新上线《蓝桥杯辅导》课程,近五年的蓝桥杯省赛与国赛真题都有,从读题开始理解题意、梳理思路、实现代码再提交评测全过程,可有效提升获奖比例甚至进国赛!课程介绍、试听请猛击这里

  评论区

  • «
  • »