马鞍数
题目描述
求一个n×m数阵中的马鞍数,输出它的位置。所谓马鞍数,是指在行上最小而在列上最大的数。
如下: n=5 m=5
5 6 7 8 9
4 5 6 7 8
3 4 5 2 1
2 3 4 9 0
1 2 5 4 8
则1行1列上的数就是马鞍数。
输入
共n+1行,第一行: n m (n,m<10) 第2到n+1行:每行m个整数(每个数都<10)
输出
输出若干行:如果存在马鞍数,则输出所有马鞍数,每行一个,为行和列以及马鞍数。 如果不存在马鞍数,则输出'not exit'。
样例输入 [复制]
9 8
9 8 7 6 5 4 3 2
8 8 9 9 9 9 9 9
3 7 7 6 5 4 2 1
8 8 3 2 1 7 3 2
7 5 3 2 9 1 3 2
6 3 2 1 9 3 1 3
8 2 1 3 5 8 9 1
1 3 2 1 3 5 6 8
9 3 1 2 3 4 5 8
样例输出 [复制]
2 2 8
由于本人很菜,先附上最低级没效率的代码,以后变强了回来补充的。
#include<stdio.h>
int main()
{
int n,m,a[100][100],min;
int i,j,k,flag,flag2=0;
scanf("%d%d",&n,&m);
for(i=0; i<n; i++)
for(j=0; j<m; j++)
scanf("%d",&a[i][j]);
for(i=0; i<n; i++)
{
min=a[i][0];
for(j=0; j<m; j++)
{
if(a[i][j]<min)
min=a[i][j];
}
for(j=0; j<m; j++)
{
if(a[i][j]==min)
{
flag=1;
for(k=0; k<n; k++)
if(a[k][j]>min)
{
flag=0;
break;
}
if(flag)
{
flag2=1;
printf("%d %d %d\n",i+1,j+1,a[i][j]);
}
}
}
}
if(flag2==0)
printf("not exit\n");
}
推荐阅读