求n*m矩阵的鞍点(2<=n和m<=10)。鞍点既是所在行的最大值又是所在列的最小值。 如果矩阵没有鞍点,则输出0;否则在每一行输出鞍点的行和列及其值。 注意:矩阵的元素可能有些值是一样的。

img


下面是我个人写的代码,问题还挺大的,希望友友们帮帮忙,可以拿输入样例测试下,问题解决一定会采纳的!


#include <stdio.h>
int main(void){
  int m,n,i,j,a[20][20],max,min,count=0,t,r,c;
  scanf("%d %d",&m,&n);
  for(i=0;i<m;i++){
    for(j=0;j<n;j++){
      scanf("%d",&a[i][j]);
    }
  }
  for(i=0;i<m;i++){
    max=a[i][0];
    for(j=1;j<n;j++){
      if(max<=a[i][j]){
        max=a[i][j];
        min=max;
    for(t=0;t<m;t++){
      if(min>=a[t][j]){
        min=a[t][j];
      }
    }
    if(max==min){
      count++;
      printf("Matrix[%d,%d]=%d\n",i,j,a[i][j]);
      break;
    }
  }
    }
  }
  if(count==0){
    printf("0\n");
  }
  return 0;
}

供参考:

#include<stdio.h>
#define N 20
int main()
{
    int a[N][N], m, n, x[N], y[N], cnt = 0, i, j;
    scanf("%d%d", &m, &n);
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            scanf("%d", &a[i][j]);
        }
    }
    for (i = 0; i < m; i++)
    {
        x[i] = a[i][0];
        for (j = 1; j < n; j++)
        {
            if (a[i][j] > x[i])
                x[i] = a[i][j];
        }
    }
    for (j = 0; j < n; j++)
    {
        y[j] = a[0][j];
        for (i = 1; i < m; i++)
        {
            if (a[i][j] < y[j])
                y[j] = a[i][j];
        }
    }
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            if (a[i][j] == x[i] && a[i][j] == y[j])
            {
                printf("Matrix[%d,%d]==%d\n", i, j, a[i][j]);
                cnt++;
            }
        }
    }
    if (cnt == 0)
        printf("0\n");
    return 0;
}