#include <stdio.h>
static void find_max_sum_of_consecutive_num(int* a, int len)
{
int idx;
long long max_sum = ~0;
long long cur_sum;
int i;
for(i=0; i<(len-3); i++)
{
cur_sum = a[i] + a[i+1] + a[i+2] + a[i+3];
if(max_sum < cur_sum)
{
max_sum = cur_sum;
idx = i;
// printf("1 max_sum=%ld a[%d] a[%d] a[%d] a[%d]\n", max_sum, a[i], a[(i+1)%len], a[(i+2)%len], a[(i+3)%len]);
}
}
// 和第一段区分开,数组很长的时候可以节省些除法算力
for(i=len-3; i<len; i++)
{
cur_sum = a[i] + a[(i+1)%len] + a[(i+2)%len] + a[(i+3)%len];
if(max_sum < cur_sum)
{
max_sum = cur_sum;
idx = i;
// printf("2 max_sum=%ld a[%d] a[%d] a[%d] a[%d]\n", max_sum, a[i], a[(i+1)%len], a[(i+2)%len], a[(i+3)%len]);
}
}
printf("max_sum=%ld a[%d] a[%d] a[%d] a[%d]\n", max_sum, a[idx], a[(idx+1)%len], a[(idx+2)%len], a[(idx+3)%len]);
}
int main(void) {
int a[10] = {0,2,3,-1,-1,1,0,6,-10,20};
find_max_sum_of_consecutive_num(a, sizeof(a)/sizeof(a[0]));
return 0;
}
打印结果:
1 max_sum=4 a[0] a[2] a[3] a[-1]
1 max_sum=6 a[-1] a[1] a[0] a[6]
1 max_sum=16 a[0] a[6] a[-10] a[20]
2 max_sum=25 a[20] a[0] a[2] a[3]
max_sum=25 a[20] a[0] a[2] a[3]
给出一组数,打印出连续 4 个数的和 最大的一组
于 2024-11-13 09:39:20 首次发布