翁恺c语言鞍点习题
2鞍点(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
- List item
输出样例:
2 1
#include<stdio.h>
int main()
{
int n, i, j;
scanf("%d", &n);
int matrix[n][n];
int x = -1, y = -1;
int m[n];int max[n];//m[i]表示第i行最大值的列数;max[i]表示第i行最大值;显然有max[i]=matrix[i][m[i]];
//数据初始化
for(i = 0;i < n; i++){
for(j = 0; j< n; j++){
scanf("%d", &matrix[i][j]);
}
}
i=0;int have=1;//have=1;假设有鞍点;
while(i<n){
m[i]=0;max[i]=matrix[i][0];//假设第i行最大值在第0列,为matrix[i][0];
have=1;
//遍历第i行,找出m[i],max[i];
for(j=1;j<n;j++){
if(matrix[i][j]>max[i]){
m[i]=j;max[i]=matrix[i][j];
}
}
//用t存储m[i],min 存储max[i];
int t = m[i];int min=max[i];
//遍历第t列(即判断min=matrix[i][m[i]]是不是鞍点);
for(int k=0;k<n;k++){
if(matrix[k][t]<min){
have=0;break;
}
}
if(have==1){
x=i;y=m[i];
break;
}
i++;
}
if(have==1){
printf("x=%d,y=%d\n",x,y);
}else{
printf("No\n");
}
return 0;
}