BossWang·ST 2019-12-04 15:30 采纳率: 100%
浏览 503
已采纳

如何不遍历二维数组查找最大值?

有没有方法在不遍历二维数组的情况下查找到最大值?
例如一个3×4的二维数组,遍历查找很容易,我用的就是遍历查找的方式写的代码:

#include<stdio.h>
int main(void)
{
int a[3][4],max,row,col;
int i,j;

puts("Please enter 12 numbers:");
for(i=0;i<3;i++)
    for(j=0;j<4;j++)
        scanf("%d",&a[i][j]);

printf("The matrix is showed here:\n");
for(i=0;i<3;i++)
{
    for(j=0;j<4;j++)
        printf("%4d",a[i][j]);
    puts("\n");
}

max=a[0][0];
row=0,col=0;
for(i=0;i<3;i++)
    for(j=0;j<4;j++)
        if(max<a[i][j])
        {
            max=a[i][j];
            row=i;
            col=j;
        }
printf("The max number is a[%d][%d]=%d\n",row,col,max);

return 0;
}

但是如果是一个300×400的二维数组,遍历查找的方式近乎不可能,有没有什么方法能在这样的情况下寻找到最大值呢?

  • 写回答

2条回答 默认 最新

  • sky night 2019-12-04 16:07
    关注

    什么方法都需要每个比较的,但是可以写个函数就方便了,
    以后调用这个函数取最大值就行了,比如:

    先把二维数组转为1维数组作为输入,这样比较通用:

    int GetMaxValue(int *data, int row, int col, int &row_max, int &col_max)
    {
         int maxV = data[0];
            row_max = 0;
            col_max = 0;
            for(int i = 0; i < row; i++)
            {
                for(int ii = 0; ii < col; ii++)
                    {
                        if( maxV < data[i * col + col]) 
                            { 
                               maxV = data[i * col + col]; 
                               row_max = i;
                                 col_max = ii;
                            }
                    }
            }
            return maxV;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已采纳回答 7月18日

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料