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

导读:本篇文章讲解 输入一个二维数组,判断是否有【鞍点】,若有请输出鞍点(C语言),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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

思路:

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

代码:

#include<stdio.h>
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;i<N;i++){
		for(j=0;j<M;j++){
			scanf("%d",&arr[i][j]);
		}
	}
	//寻找鞍点 
	for(i=0;i<N;i++){								//从第每一行开始 
		for(j=0,max=arr[i][j];j<M;j++){				//先设本行的第一个元素为该行最大的 
			if(arr[i][j]>max){						//遍历本行所有元素,找出本行最大的元素并存入max 
				max=arr[i][j];
				colum=j;							//记下最大元素的列号 
			}				
		}
		for(k=0,j=colum,min=arr[k][j];k<N;k++){		//在最大元素的列中寻找最小值;先设本列第一个元素是最小的 
			if(min>arr[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.输入以下数组:

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

 运行结果:

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

2.输入以下数组:

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

运行结果:

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

 存在的不足:

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/82683.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!