问题描述
找一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小。鞍点最多一个,也可能不存在。
输入
第一行是二维数组的行数和列数(行和列的数目均不大于100),之后为二维数组。
输出
如果存在鞍点,输出鞍点所在的行、列及其值,每个数后一个空格;如果不存在,输出"N"
输入样列
3 3
11 22 33
99 33 55
44 55 66
输出样例
0 2 33
#include<stdio.h>
int main()
{
int m,n,x,y;
scanf("%d%d",&m,&n);
char a[m][n];
int min,max,i,j;
for(i=0;i<m;i++){
for(j=0;j<n;j++){
scanf("%d",a[m][n]);
}
}
max=a[i][0];
for(i=0;i<m;i++){
for(j=0;j<n;j++){
if(a[i][j]>max){
max=a[i][j];
x=i;
y=j;
}
}
}
min=a[0][y];
for(i=0;i<m;i++){
if(a[i][y]<min)
min=a[i][y];
}
if(min==max) printf("%d %d %d\n",x,y,min);
else printf("N\n");
return 0;
}
#include<stdio.h>
int main()
{
int m,n,x,y;
scanf("%d%d",&m,&n);
int a[m][n];
int row_max[m], col_min[n];
int min,max,i,j;
for(i=0;i<m;i++){
for(j=0;j<n;j++){
scanf("%d",&a[m][n]);
}
}
for(i=0;i<m;i++){
max = a[i][0];
row[i] = 0;
for(j=0;j<n;j++){
if(a[i][j]>max){
max=a[i][j];
row[i] = j;
}
}
}
for(j=0;<n;j++){
min = a[0][j];
col[j] = 0;
for(i=0;i<n;i++){
if(a[i][j]<min){
min=a[i][j];
row[j] = i;
}
}
}
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
if (row[i] == j && col[j] == i) {
printf("%d %d %d\n", i, j, a[i][j]);
return 0;
}
}
}
printf("N\n");
return 0;
}
我改了改你的代码,看看吧
scanf("%d",&a[m][n]);
每天都有人犯这种错误