求二维数组中的鞍点【数组】

求二维数组中的鞍点【数组】

时间: 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++;
   }
  
  }
 
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注