有没有朋友看看怎么做,用的codeblocks

img

刚学数组,不知道怎么弄这个记行号列号,还有这个没有鞍点,人晕了

我的思路如下:
1、申请一块内存用于存储m*n个整数,然后用一个int指针指向它,以便访问数据.

2、通过外层for循环遍历每一行,然后用两个内层for循环遍历找出所在行的最大值,即判断再所在列是否为最小值,如果是的,则打印它的行列,及其值。

3、如果遍历完所有整数,都没有找到靶点,则输出“No”.
代码如下:

#include <stdio.h>
#include <stdlib.h>
int main(void){
    
    int m,n;
    
    scanf("%d%d",&m,&n);
    
    //printf("m=%d,n=%d\n",m,n);
    
    int * p = (int*)malloc(sizeof(int)*(m*n)); //申请一块内存用于存储m*n个整数 
    
    for(int i=0;i<m;i++){    //从输入获取m*n个整数 
        for(int j=0;j<n;j++){
            scanf("%d",((p+i*n)+j));
        } 
    }
    
//    printf("输入的数组为:\n");
//    for(int i=0;i<m;i++){
//        for(int j=0;j<n;j++){
//            printf("%d ",*((p+i*n)+j));
//        } 
//        printf("\n");
//    }
    int target=0;
    for(int i=0;i<m;i++){
        
         
        int max=*(p+i*n+0);  
        int maxIndex=0;
    //    printf("i=%d,",i);
        for(int j=0;j<n;j++){
            
            
            //printf("j=%d,",j);
            //寻找数组每行最大的数 
            if(max<*(p+i*n+j)){
                max=*(p+i*n+j);
                maxIndex = j;
            }
        }
        
        target=1;
        //然后找出最大的这个数在所在的列是否为最小 
        for(int k=0;k<m;k++){
        //    printf("k=%d,",k); 
            if(max>=*(p+k*n+maxIndex)){
                target=0;
            }
        }
        
        //如果在所在行最大, 在所在的列最小 ,即为所寻找的靶点,打印打印它的行列,及其值 
        if(target==1){
            printf("%d %d %d\n",(i+1),(maxIndex+1),max);
        }
    //    printf("i=%d,finished!\n",i); 
    }
    
    if(target==0){
        printf("No");
    } 
    
    return 0;
} 


img