鞍点问题

来源:互联网 发布:淘宝客产品推广合作 编辑:程序博客网 时间:2024/05/20 03:42

题目内容:

给定一个n*n矩阵A。矩阵A的鞍点是一个位置(i,j),在该位置上的元素是第i行上的最大数,第j列上的最小数。一个矩阵A也可能没有鞍点。

你的任务是找出A的鞍点。


输入格式:

输入的第1行是一个正整数n, (1<=n<=100),然后有n行,每一行有n个整数,同一行上两个整数之间有一个或多个空格。


输出格式:

对输入的矩阵,如果找到鞍点,就输出其下标。下标为两个数字,第一个数字是行号,第二个数字是列号,均从0开始计数。

如果找不到,就输出

NO

题目所给的数据保证了不会出现多个鞍点。

输入样例:

1 7 4 1 

4 8 3 6 

1 6 1 2 

0 7 8 9


输出样例:

2 1

下面是代码:

#include <stdio.h>
void main ()
{
 int i,j,n,p,q,x,y,max,min;
 printf("输入一个正整数:");
 scanf("%d",&n);
 int a[n][n];
 printf("输入%d个整数:",n*n);
 for(i=0;i<n;i++){
  for(j=0;j<n;j++){
   scanf("%d",&a[i][j]);
  }
 }
 for(i=0;i<n;i++){  //在行中找出最大数max
  max=a[i][0];
  for(j=1;j<n;j++){
   if(a[i][j]>max){
    max=a[i][j];
    p=i;
    q=j;
   }
  }
  min=a[p][q];
  for(i=0;i<n;i++){  //再将max的值赋给min验证是否为所在列的最小数,若是则这个数就是鞍点
   if(a[i][q]<min){
    min=a[i][q];
    x=i;
    y=q;
   }
  }
  if(p==x,q==y){
   printf("鞍点的位置在(%d,%d)",x,y);
  }
  else {
   printf("NO");
  }
 }
 }