在2D数组C中查找指定行和列的最大值



这是一个函数原型,用于接收2D数组、特定行、特定列和数组的大小(大小既是行数也是列数)。然后,它应该返回行和列的单个最大值。我不太确定发生了什么,但它的行为不正确,只是返回了奇怪的结果。所以我有点迷路了,我觉得我很接近,但不确定出了什么问题。

int search_max(int a[][MAX], int r, int c, int size)
{
 int maxr = a[0][0];
 int maxc = a[0][0];
 int maxfin = 0;
 int x;
 int y;
 for (x = r; x <= r; x++)
 {
     for (y = 0; y < size; y++)
     {
         if (maxr < a[x][y])
         {
             maxr = a[x][y];
            return maxr;
         }
     }   
 }
 for (y = c; y <= c; y++)
 {
     for (x = 0; x < size; x++)
     {
         if (maxc < a[x][y])
         {
             maxc = a[x][y];
             return maxc;
         }
     }
 }
 if (maxc > maxr)
 {
     maxc = maxfin;
 }
 if (maxr > maxc)
 {
     maxr = maxfin;
 }
 else
 {
     maxr = maxfin;
 }
 return maxfin;
}

只需移除return maxcreturn maxr并移除

 if (maxc > maxr)
 {
     maxc = maxfin;
 }

您的问题陈述和函数原型不匹配:

这是一个函数原型,用于接收2D数组、特定行、特定列和数组的大小(大小是行和列的数量)。

int search_max(int a[][MAX], int r, int c, int size)

原型表示,数组的长度不确定,但每一行的大小都是MAX,而不是size。在C99或更高版本中,您可以使用VLA(可变长度数组)编写您指定的内容:

int search_max(int size, int a[size][size], int row, int col)

只要传递的数组的宽度为MAX,只要size不大于MAX,只要行和列都小于size,就可以使代码工作。

要向下搜索一列,不需要嵌套循环;一个就足够了。同样,要在一行中进行搜索,不需要嵌套循环。当设置maxcmaxr的初始值时,需要从要分析的行或列中进行设置。

把所有这些放在一起会导致:

int search_max(int size, int a[size][size], int row, int col)
{
    assert(row >= 0 && row < size);
    assert(col >= 0 && col < size);
    assert(size <= MAX);
    
    int maxr = a[r][0];
    int maxc = a[0][c];
    
    for (int i = 1; i < size; i++)
    {
        if (a[i][c] > maxc)
            maxc = a[i][c];
    }
    for (int i = 1; i < size; i++)
    {
        if (a[r][i] > maxr)
            maxr = a[r][i];
    }
    return (maxr > maxc) ? maxr : maxc;
}

对于给定的断言,可以使用您的函数签名来代替我的签名。

也可以不使用单独的maxrmaxc变量;简单使用:

int max = a[r][c];  // Or a[r][0] or a[0][c]

然后在0(而不是1)到size的范围内运行两个循环,比较并设置并返回max。保持循环对称。(如果数组很大,则额外比较的成本无关紧要;如果数组很小,则额外对比的成本无关紧要。)

相关内容

  • 没有找到相关文章