计算矩阵的马鞍点

请写一个程序, 找出给定矩阵的马鞍点. 若一个矩阵中
的某元素在其所在行最小而在其所在列最大,则该元素为矩阵的一个马鞍点

输入说明: 输入数据由 m+1 行构成,第一行只有两个整数 m 和 n (0<m<100,0<n<100),
分别表示矩阵的行数和列数,接下来m行,每行n个整数表示矩阵元素(矩阵中元素互不相同),
整数之间以空格间隔.
输出说明: 在一行上输出马鞍点的行号,列号(行号和列号从0开始计数)
及元素的值(用一个空格分隔), 之后换行; 若不存在马鞍点,则输出一个字符串"no"后换行
输入示例:
4 3
11   13   121
407  72   88
23	 58   1
134  30   62


4 3
11   13   12
407  72   8
23	 58   1
134  80   62
输出示例:
1 1 72

思路:

1.找出每一行的最小值,并记录列号
2.判断是否为每一列的最大值
3.正常退出循环,则为马鞍点

代码如下:

/*
	请写一个程序, 找出给定矩阵的马鞍点. 若一个矩阵中
	的某元素在其所在行最小而在其所在列最大,则该元素为矩阵的一个马鞍点

	输入说明: 输入数据由 m+1 行构成,第一行只有两个整数 m 和 n (0<m<100,0<n<100),
	分别表示矩阵的行数和列数,接下来m行,每行n个整数表示矩阵元素(矩阵中元素互不相同),
	整数之间以空格间隔.
	输出说明: 在一行上输出马鞍点的行号,列号(行号和列号从0开始计数)
	及元素的值(用一个空格分隔), 之后换行; 若不存在马鞍点,则输出一个字符串"no"后换行
    输入示例:
	4 3
	11   13   121
	407  72   88
	23	 58   1
	134  30   62
	

	4 3
	11   13   12
	407  72   8
	23	 58   1
	134  80   62
	输出示例:
	1 1 72
*/
#include<stdio.h>
int main(void){
	int m,n;
	int i,j,k,min,index;
	printf("请输入行号和列号:");
	scanf("%d%d",&m,&n);
	int array[m][n];
	//输入数据 
	printf("输入数据\n");
	for(i=0;i<m;i++){
		for(j=0;j<n;j++){
			scanf("%d",&array[i][j]);
		}
	}
	//计算马鞍点
	for(i=0;i<m;i++){ 
		//找出每一行最小的点 
		min=array[i][0];
		index=0;		//记录最小值的列号 
		for(j=0;j<n;j++){
			if(min>array[i][j]){
				min=array[i][j];
				index=j; 
			}
		}
		//判断是否为这一列的最大值 列号为index
		for(k=0;k<m;k++){
			if(min<array[k][index]){//不是最小值 退出循环 
				break;
			}
		}
		//判断是否正常退出循环,正常则为马鞍点
		if(k==m){
			printf("%d\t%d\t%d\n",i,index,min);
		} 
	} 
	return 0;
}

版权声明:本文为yingmu__原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。