请写一个程序, 找出给定矩阵的马鞍点. 若一个矩阵中
的某元素在其所在行最小而在其所在列最大,则该元素为矩阵的一个马鞍点
输入说明: 输入数据由 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版权协议,转载请附上原文出处链接和本声明。