#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);
}
答案 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。