给出一组数,打印出连续 4 个数的和 最大的一组

#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]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值