求和的2D C++阵列

求和的2D C++阵列,c++,arrays,sum,C++,Arrays,Sum,教授给我的任务是编写程序,使用随机函数生成2D数组,若其他函数是void类型,我应该找到那个行的最大和和和索引的行。这是我的代码,我知道我在void函数中犯了错误,但如果可能的话,我不知道如何编写该函数。。。任何评论都会大有帮助 #include <stdio.h> #include <stdlib.h> #include <time.h> void najred(int a[5][5], int *s) { int i; for (in

教授给我的任务是编写程序,使用随机函数生成2D数组,若其他函数是void类型,我应该找到那个行的最大和和和索引的行。这是我的代码,我知道我在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);
}
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 );
}
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 ( * )[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 );
}
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;
在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.< /P>我知道它会更简单,但是对我的教授说…他指出它必须是无效函数THX,但是我的C++编译器donST允许你使用的一半东西……我教授的另一个重要方面…我甚至不能使用普通C++。你应该弄清楚你是否使用。C或C++。我不明白什么方法不使用普通C++。这是胡说八道。我用C++,但是教授给了我们一些过时的和有限的学校版本,所以我不能像你们大家那样做一半的程序…不管怎样,努力和帮助:如果你说的是STD::你可以自己写一行的总和。哈哈,现在我被OP发现了。因为它显示了和行的随机数instad…反正是thx