题目: 二维整型数组的“最大点”

发布时间:2024年01月04日
【问题描述】

求二维整型数组的“最大点”。二维数组的“最大点”定义为:某个数是所在行的最大值,并且是所在列的最大值。注意:某行或某列上可能有多个“最大点”。

【输入形式】

从控制台读入二维数组。

第一行只有以空格分隔的两个正整数n和m(n,m<=10),n代表二维数组的行数,m代表二维数组的列数。

然后在后续n行上输入二维数组的元素,每行有m个以若干空格分隔的整数,代表二维数组在该行上的所有元素。

【输出形式】

向控制台输出二维数组的“最大点”,按行下标、列下标从小到大的顺序输出,每行一个,先输出“最大点”数值,再输出对应的行数、列数(行列都从1开始计数),以一个空格分隔。

【样例输入】

3? 4

8? 60? 7? 100

10? 498? 12? 49

-71? 132? 4? 85

【样例输出】

100 1 4
498 2 2

【样例说明】

输入了一个三行四列的二维数组,第一行第四列的元素100是第一行的最大元素,同时也是第四列的最大元素,所以该元素是“最大点”,输出100 1 4。同样第二行第二列的元素498也是第二行的最大元素,同时是第二列的最大元素,故该元素也是“最大点”,输出498 2 2。

【评分标准】

该题要求输出二维数组的所有“最大点”,共有5个测试点。

? ? ? ? ? ?——————————————————————————————————

这个题要先把题目看懂,“多个最大点”就是一个挺大的坑。

测试的时候可以全面的考虑一下。比如:

样例输入:

3? 4

11? ?1? ? 2? ? 3

1? ? 11? ?4? ? 5

2? ? 11? ?11? 1

样例输出:

11? ?1? ?1

11? ?2? ?2

11? ?3? ?2

11? ?3? ?3

红颜色的是比较容易犯的错,要多注意细节。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int m,n,i=0,j=0,k=0,max,pos,flag;//pos指找到的max的下标,flag判断是不是最大点;
    scanf("%d %d",&m,&n);//输入行m,列n(其实行用col表示,列用row表示更好一点);
    int a[m][n];//定义数组a;
    //输入数组;
    for(i=0;i<m;i++){
        for(j=0;j<n;j++){
            scanf("%d",&a[i][j]);
        }
    }
    //查找每一行的第一个最大值;
    for(i=0;i<m;i++){
        flag=1;//flag初始化为1;
        max=a[i][0];
        for(j=1;j<n;j++){
            if(a[i][j]>max){
                max=a[i][j];
                pos=j;
            }
        }
        //判断找到的行最大值是否为列最大值;
        for(k=0;k<m;k++){
            if(a[k][pos]>max){
                flag=0;//如果所在的列出现大于该max值的数,flag为0,该数不是要找的最大点;
                break;
            }
        }
        //flag=1表示该数就是the very max,输出该max和行数列数;
        if(flag==1){
            printf("%d %d %d\n",max,i+1,pos+1);
        }
        //下面的循环用来判断该行是否有相同的最大值,是否也是符合条件的最大点;
        for(j=pos+1;j<n;j++){
            if(a[i][j]==max){ //由于上面已经找到了行max值,所以再次判断时看有没有等于max的就OK
                pos=j;
                flag=1;//同样初始化flag;
                //判断是否也是列max;
                for(k=0;k<m;k++){
                    if(a[k][pos]>max){
                        flag=0;
                        break;
                    }
                }
                //如果是最大点,输出;
                if(flag==1){
                    printf("%d %d %d\n",max,i+1,pos+1);
                }
            }
        }
    }
    return 0;
}

代码写的不怎么好看,欢迎大家指正。

有不清楚的地方,欢迎评论留言哦。

文章来源:https://blog.csdn.net/2301_80342743/article/details/135373076
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。