带和的2D c ++数组

时间:2013-12-29 19:41:51

标签: c++ arrays sum

教授给我的任务是编写使用函数随机生成二维数组的程序,然后如果其他函数(即无效类型)我应该找到具有该行的最大总和和索引的行。这是我的代码,我知道我在void函数中犯了错误但我不知道如何编写该函数,如果可能的帮助...任何评论都会很有帮助

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

void najred(int a[5][5], int *s)
{
    int i;  
    for (int j = 0; j < 5; j++)
    {
        *s += a[i][j];
        i++;
    }
}

int main()
{
    int a[5][5], i, j, s;
    srand(time(0));

    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
            a[i][j] = rand() % (82);
        }
    }

    printf("ARRAY :\n");
    for (i = 0; i < 5; i++)
    {
        printf("\n");
        for (j = 0; j < 5; j++)
        {
            printf("%3d", a[i][j]);
        }
    }
    najred(a, &s);
}

2 个答案:

答案 0 :(得分:0)

  

函数(即void类型)l应该找到最大和的行   该行的索引

这是一个糟糕的功能声明。如果函数只返回具有最大总和的行,那会好得多。拥有该行,您始终可以计算索引。

我会按以下方式定义函数

int ( * )[5] najred( int ( *a )[5], size_t n )
{
   int ( *max_row )[5] = a;

   if ( n != 0 )
   {
      int max_sum = std::accumulate( *a, *a + 5, 0 );

      for ( size_t i = 1; i < n; i++ )
      {
         int sum = std::accumulate( *( a + i ), *( a + i ) + 5, 0 );
         if ( max_sum < sum )
         {
            max_sum = sum;
            max_row = a + i;
         }
      }
   }

   return ( max_row );
}

或者您可以将标准算法std::max_element用于带有lambda表达式的二维数组。

如果函数必须返回类型为void,那么它可以采用以下方式

void najred( int ( * &a )[5], size_t n )
{
   int ( *max_row )[5] = a;

   if ( n != 0 )
   {
      int max_sum = std::accumulate( *a, *a + 5, 0 );

      for ( size_t i = 1; i < n; i++ )
      {
         int sum = std::accumulate( *( a + i ), *( a + i ) + 5, 0 );
         if ( max_sum < sum )
         {
            max_sum = sum;
            max_row = a + i;
         }
      }
   }

   a = max_row;
}

可以通过以下方式调用该函数

int ( *p )[5] = a;

najred( p, 5 );

并且在函数调用之后计算索引

int index = p - a;

答案 1 :(得分:0)

najred功能中,您需要跟踪最大总和及其找到的行。

  int max_sum = INT_MIN;  // Mininum value for int, see <limits>
  int row_of_max = -1;
  int row_sum = 0;
  for (i = 0; i < 5; ++i)
  {
    row_sum = 0;
    for (j = 0; j < 5; ++j)
    {
      row_sum += a[i][j];
    }
    if (row_sum > max_sum)
    {
      row_of_max = i;
      max_sum = row_sum;
    }
  }

返回值索引留给OP。