栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

输入一个二维数组,判断是否有【鞍点】,若有请输出鞍点(C语言)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

输入一个二维数组,判断是否有【鞍点】,若有请输出鞍点(C语言)

在矩阵中,一个数在所在行中是最大值,在所在列中是最小值,则被称为鞍点。

思路:

找出第一行中最大的数,再找出这个数所在列的最小数。比较两数是否相同,若相同则为鞍点并输出该数(和行号和列号)并终止寻找。若第一行没找到,换下一行,操作同上。若果遍历数组的每一行都没有鞍点,则该数组无鞍点。

代码:

#include
int main(void){
	int i,j,k,sign=0;			//k用来代替i,内层循环也用i会使外层循环次数减少;符号变量sign判断元素是否为鞍点
	int max,min;				//max记录一行中的最大值;min记录一列中的最小值 
	int row,colum;				//记下元素所在的行、列号
	int N=10,M=10;
	int arr[N][M];				//定义一个二维数组 
	//获取输入数组的行、列数			
	printf("请输入输入数组的行数,列数:");
	scanf("%d%d",&N,&M);
	//数据输入
	printf("请输入数组:n");
	for(i=0;imax){						//遍历本行所有元素,找出本行最大的元素并存入max 
				max=arr[i][j];
				colum=j;							//记下最大元素的列号 
			}				
		}
		for(k=0,j=colum,min=arr[k][j];karr[k][j]){						//遍历本行所有元素,找出本列最小的元素并存入min 
				min=arr[k][j];
				row=k;								//记下最大元素的行号
			}									
		}
		//判断是否为鞍点 
		if(min==max){								//若果一行中所有元素的最大值max也是该元素所在列中所有元素的最小值min(即鞍点)则置sign为1 
			sign=1;break;							//如果找到了鞍点则直接跳出循环( 
		}
	}
	//结果输出 
	if(sign)printf("该数组有鞍点:%d,位于行%d,列%d",max,row+1,colum+1);		//若sign为1,则数组有鞍点(为防止数组中红相同元素的干扰,输出所在的行、列号) ,反之无鞍点
	else printf("该数组没有鞍点");
	return 0;
} 

1.输入以下数组:

 运行结果:

2.输入以下数组:

运行结果:

 

 存在的不足:

无法输出有多个鞍点的数组的所有鞍点,例如找如下数组的鞍点:

 

 如上,该程序只是找出了其中的一个行数列数最小的一个鞍点。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/832923.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号