一道c语言题目 学生党 感谢!
有一个case死活过不了
帮帮孩子
题目内容:
二维数组中的鞍点,即该位置上的元素是所在行上的最大值,是所在列上的最小值。
二维数组也可能没有鞍点。
输入一个二维数组的行数n,列数m,二维数组的诸元素值;输出数组的鞍点,以及鞍点所在的行列号。
输入格式:
第一行为矩阵的行数和列数,从第二行开始,为矩阵本身(假设输入的矩阵只有0和1个鞍点)
输出格式:
数组的鞍点,以及鞍点所在的行列号 (下标从0开始)
输入样例1:
3 4 1 3 5 3 2 3 4 1 3 2 6 7[回车]
输出样例1:
Point:a[1][2]==4[回车]
输入样例2:
3 4 1 2 3 4 8 4 3 6 9 4 5 1[回车]
输出样例2:
No Point[回车]
#include <stdio.h>
int main()
{
int n,m,i,j,max,exchange,k,maxx,maxy,line,trigger=0,trigger2=0;
int a[40][40];
scanf("%d %d",&n,&m);
for(i=0;i<=n-1;i++)
for(j=0;j<=m-1;j++){
scanf("%d",&a[i][j]);
}
for(i=0;i<=n-1;i++){
max=a[i][0];
maxx=i;
maxy=0;
for(j=1;j<=m-1;j++){
if(a[i][j]>=max) {
max=a[i][j];
maxx=i;
maxy=j;
}
}
for(line=0;line<=m-1;line++){
if(a[line][maxy]<a[maxx][maxy]){trigger=1;break;
}
}
if(trigger==0){
printf("Point:a[%d][%d]==%d\n",maxx,maxy,a[maxx][maxy]);
trigger2=1;
}
if(trigger==1){trigger=0;
}
}
if(trigger2==0) printf("No Point\n");
return 0;
}
代码修改如下:如有帮助,请采纳一下,谢谢。
#include <stdio.h>
int main()
{
int n,m,i,j,maxx;
int a[40][40];
scanf("%d %d",&n,&m);
for(i=0;i<=n-1;i++)
{
for(j=0;j<=m-1;j++)
{
scanf("%d",&a[i][j]);
}
}
bool b = false;
for (i = 0; i <n;i++)
{
//找i行的最大值
maxx = a[i][0];
int index = 0;
for(j = 0;j < m;j++)
{
if (a[i][j] > maxx)
{
maxx = a[i][j];
index = j;
}
}
//判断a[i][index]是否是该列的最小值
int t = 0;
for (; t < n;t++)
{
if (a[t][index] < maxx)
{
break;
}
}
if (t == n)
{
b = true;
printf("Point:a[%d][%d]==%d\n",i,index,a[i][index]);
}
}
if (!b)
{
printf("No point\n");
}
getchar();
getchar();
return 0;
}
把 maxx=i;放到循环外面去,改为maxx = 0;