一道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;