求二维数组中的鞍点【数组】
时间: 1ms 内存:128M
描述:
如果矩阵A中存在这样的一个元素A[i,j]满足条件:A[i,j]是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。请编程计算出m*n的矩阵A的所有马鞍点。
输入:
输入m,n
然后输入数组中的每个元素
输出:
输出m*n的矩阵A的所有马鞍点
示例输入:
3 3
1 7 3
5 4 6
17 18 9
示例输出:
9
提示:
参考答案(内存最优[752]):
#include<stdio.h>
int main()
{int m,n,h,u,mm,nn,min,max,j=0,q[100][100];
scanf("%d %d",&m,&n);
for(h=0;h<m;h++)
for(u=0;u<n;u++)
{
scanf("%d",&q[h][u]);
}
for(h=0;h<m;h++)
for(u=0;u<n;u++)
{ min=q[h][u];
for(nn=0;nn<n;nn++)
if(q[h][nn]<min)
min=q[h][nn];
max=q[h][u];
for(mm=0;mm<m;mm++)
if(q[mm][u]>max)
max=q[mm][u];
if(max==min&&max==q[h][u]&&j>0)
{
printf(" ");
printf("%d",q[h][u]);
}
if(max==min&&max==q[h][u]&&j==0)
{
printf("%d",q[h][u]);
j++;
}
}
}
参考答案(时间最优[0]):
#include<stdio.h>
int main()
{int m,n,h,u,mm,nn,min,max,j=0,q[100][100];
scanf("%d %d",&m,&n);
for(h=0;h<m;h++)
for(u=0;u<n;u++)
{
scanf("%d",&q[h][u]);
}
for(h=0;h<m;h++)
for(u=0;u<n;u++)
{ min=q[h][u];
for(nn=0;nn<n;nn++)
if(q[h][nn]<min)
min=q[h][nn];
max=q[h][u];
for(mm=0;mm<m;mm++)
if(q[mm][u]>max)
max=q[mm][u];
if(max==min&&max==q[h][u]&&j>0)
{
printf(" ");
printf("%d",q[h][u]);
}
if(max==min&&max==q[h][u]&&j==0)
{
printf("%d",q[h][u]);
j++;
}
}
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。