关于##include#的问题,如何解决?

虽然我写的代码很啰嗦,但看不出逻辑错在哪,有人帮忙看看吗

img

#include
int main()
{
    int i , j , x , y , t , m , k , n ;
    int a[4][5] ;
    int c = -1 , b = -1 ;
    scanf( "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d" , &a[0][0] , &a[0][1] , &a[0][2] , &a[0][3] , &a[0][4] , &a[1][0] , &a[1][1] , &a[1][2] , &a[1][3] , &a[1][4] , &a[2][0] , &a[2][1] , &a[2][2] , &a[2][3] , &a[2][4] , &a[3][0] , &a[3][1] , &a[3][2] , &a[3][3] , &a[3][4] ) ;
    for( i = 0 ; i <=3 ; i ++ )    
    {
        for( j = 0 ; j <= 4 ; j ++ )
        {
            for( k = 0 ; ( k <= 4 ) && ( m >= 0 ) ; k ++ )
            {
                m = ( a[i][j] - a[i][k] ) ;    
            }
            if( ( k == 4 ) && ( m >= 0 ) )
            {
                b = j ;
            }
            for( t = 0 ; ( t <= 3 ) && ( n <= 0 ) ; t ++ )
            {
                n = ( a[i][b] - a[t][b] ) ;
            }
            if( ( n <= 0 ) && ( t == 3 ) )
            {
                c = i ;
            }
            
        }
    }
    if( ( c != -1 ) && ( b != -1 ) )
    {
        printf( "a[%d][%d]=%d" , c , b , a[c][b] ) ;
    }
    else
    {
        printf( "None" ) ;
    }
    return 0 ;
}

寻找靶点的逻辑有点不对,用(k == 4 ) && ( m >= 0) 和( n <= 0 ) && ( t == 3 ) 来寻找靶点不适合,因为没有先计算出此行的最大点,再计算此数是当前列最小点。

修改如下:

#include<stdio.h>
int main()
{
    int i , j , x , y , t , m , k , n ;
    int mi;    // 靶点的列下表 
    int ni;  // 靶点的行下标 
    int find=0;  // 数组默认无靶点 
    int a[4][5] ;
    int c = -1 , b = -1 ;
    scanf( "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d" , &a[0][0] , &a[0][1] , &a[0][2] , &a[0][3] , &a[0][4] , &a[1][0] , &a[1][1] , &a[1][2] , &a[1][3] , &a[1][4] , &a[2][0] , &a[2][1] , &a[2][2] , &a[2][3] , &a[2][4] , &a[3][0] , &a[3][1] , &a[3][2] , &a[3][3] , &a[3][4] ) ;
    for( i = 0 ; i <=3 ; i ++ )    
    {
        m=a[i][0]; 
        mi=0;
        ni=i;
        int rowsEqual=1;
        for( j = 1 ; j <= 4 ; j ++ )
        {
   
            if(m<a[i][j]){  // 如果当前行找到比当前值大的数,则将靶点设置为此点 
            //    printf("m=%d,a[%d][%d]=%d,m<a[i][j]\n",m,i,j,a[i][j]);
                rowsEqual=0;
                m=a[i][j];
                mi=j;
                ni=i;
                continue;
            } 
            
            if(m==a[i][j]){  //处理最大值有几个的情况,如果有和当前靶点值相同的数,则将标志此行有相等最大值设置为1 
            //    printf("m=%d,a[%d][%d]=%d,m==a[i][j]\n",m,i,j,a[i][j]);
                rowsEqual=1;
            } 
        }
        
        int colsMin=1;  // 列最小值标志,默认为1,即此值在该列为最小    
        for( t = 0 ;  t <= 3  ; t ++ )
        {
            if(m>=a[t][mi]&&t!=ni){  //如果此列其他行,找到比此值小的值,则将 列最小值标志设置为0,即此值不是该列最小 
            //    printf("m=%d,a[%d][%d]=%d,m<a[i][j],m>=a[t][mi]\n",m,t,mi,a[t][mi]);
                colsMin=0;
                break;
            }
            
        }
        
        if(colsMin==1&&rowsEqual==0){  // 如果当前值为列最小,且在此行没有相同的最大值,则打印其坐标与其值 
            find=1;  // 找到靶点,标志置1 
            printf("a[%d][%d]=%d\n",ni,mi,a[ni][mi]);
        }
        
    }
    
    if(find==0){  //如果遍历完整个数组,未找到靶点,则打印None 
        printf("None"); 
    }
    
    
    return 0 ;
}
 

img