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

时间:2014-04-10 20:21:34

标签: c arrays max multidimensional-array

这是一个函数原型,用于获取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;
}

2 个答案:

答案 0 :(得分:0)

只需移除return maxcreturn maxr,然后移除

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

答案 1 :(得分:0)

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

  

这是一个函数原型,用于获取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。保持循环对称。 (如果阵列很大,额外比较的成本是微不足道的;如果阵列很小,额外比较的成本是微不足道的。)