华为OD机考-阿里巴巴找黄金宝箱2(C,python)

题目描述:

一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子,每个箱子上面贴有一个数字。

阿里巴巴念出一个咒语数字k(k

输入描述:

第一行输入一个数字字串,数字之间使用逗号分隔,例如:2,10,-3,-8,40,5

*1 ≤ 字串中数字的个数 ≤ 100000

*-10000 ≤ 每个数字 ≤ 10000

第二行输入咒语数字,例如:4,咒语数字大小小于宝箱的个数

输出描述:

连续k个宝箱数字和的最大值,例如:39

测试用例1:

输入:

2,10,-3,-8,40,5

4

输出:

39

测试用例2:

输入:

8

1

输出:

8

解题思路:

1、滑动窗口计算每个数据,记录最大值。

2、注意起始值应为第一个数据的滑动窗口,不能设置为0,因为有负值。

#include 
#include 
#include 

int main(){
    char str[20005];
    int num;
    fgets(str,20000,stdin);
    scanf("%d",&num);
    int arr[20000],arr_cnt = 0;
    char *temp_str;
    temp_str = strtok(str,",");
    while(temp_str != NULL){
        arr[arr_cnt++] = atoi(temp_str);
        temp_str = strtok(NULL,",");
    }
    int max = 0;
    //设置初始值,0起始,num个数据的和
    for(int i = 0;i < num;i++){
        max += arr[i];
    }
    for(int i = 1;i < arr_cnt;i++){
        int sum = 0;
        //滑动窗口,两个限制条件,1、起始位i,num个数据,2、最后一个数据(i + num)不能超出数列( max)  max = sum;
    }
    //打印
    printf("%d",max);
}

你可能感兴趣的:(华为od,c语言,算法)