给定一个n*n矩阵A。矩阵A的鞍点是一个位置(i,j),在该位置上的元素是第i行上的最大数,第j列上的最小数。一个矩阵A也可能没有鞍点。
你的任务是找出A的鞍点。
输入格式:
输入的第1行是一个正整数n, (1<=n<=100),然后有n行,每一行有n个整数,同一行上两个整数之间有一个或多个空格。
输出格式:
对输入的矩阵,如果找到鞍点,就输出其下标。下标为两个数字,第一个数字是行号,第二个数字是列号,均从0开始计数。
如果找不到,就输出
NO
题目所给的数据保证了不会出现多个鞍点。
输入样例:
4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9
输出样例:
2 1
输出:
#include<stdio.h> int a[10000][10000]; int main() { int n; printf("请输入矩阵规模:\n"); scanf("%d",&n); int i,j; for(i=0;i<n;i++){ for(j=0;j<n;j++){ scanf("%d",&a[i][j]); } } // for(i=0;i<n;i++){ // for(j=0;j<n;j++){ // printf("%d ",a[i][j]); // } // printf("\n"); // } int max,num=0; int t=0,v=0,s,r=0; for(i=0;i<n;i++){ max=-999; for(j=0;j<n;j++){ if(a[i][j]>max){ max=a[i][j]; t=i; v=j; } } // printf("%d %d\t",t,v); int min=100; for(s=0;s<n;s++){ if(a[s][v]<min){ min=a[s][v]; r=s; } } // printf("%d %d\t",r,v); if(r==t){ printf("%d %d\t",t,v); num++; } } if(num==0){ printf("NO\n"); } return 0; }总结:
1、scanf引号里面的内容输入之后不需要加空格,自带空格回车判定。
2、定义大数据数组最好定义在主函数main之前,否则由于C语言的结构问题会出错。
3、在一群数中求最大值或最小值的时候考虑好max,min定义数值时应该放在循环前还是循环后。
鞍点 (5分)题目内容:
给定一个n*n矩阵A。矩阵A的鞍点是一个位置(i,j),在该位置上的元素是第i行上的最大数,第j列上的最小数。一个矩阵A也可能没有鞍点。
你的任务是找出A的鞍点。
输入格式:
输入的第1行是一个正整数n, (1<=n<=100),然后有n行,每一行有n个整数,同一行上两个整数之间有一个或多个空格。
输出格式:
对输入的矩阵,如果找到鞍点,就输出其下标。下标为两个数字,第一个数字是行号,第二个数字是列号,均从0开始计数。
如果找不到,就输出
NO
题目所给的数据保证了不会出现多个鞍点。
输入样例:
4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9
输出样例:
2 1
