PTA上做一道题,一个测试点怎么也过不去,求解答

提问:PTA上做一道题,一个测试点怎么也过不去,求解答

#include int max(int a, int b){return a > b?a:b;}int main(){ int n; scanf("%d", &n); int nums[n]; for(int i = 0; i < n; ++i) scanf("%d", &nums[i]); // maxsub[n] 以nums[n] 结尾最大子列和maxsub // 以nums[n]结尾的子列和分为 // (1) length == 1 nums[n] // (2) length > 1 nums[n-length+1] nums[n-length+2] ... nums[n] // 其中 (2)中最大的是 nums[n] + maxsub(nums[n-1]) // 故 maxsub[n] = max(nums[n], maxsub(nums[n-1])) int maxsub[n], maxval = nums[0], index = 0; maxsub[0] = nums[0]; for(int i = 1; i < n; ++i){ maxsub[i] = max(nums[i], nums[i] +maxsub[i-1]); if(maxval < maxsub[i]){ maxval = maxsub[i]; index = i; } } if(maxval < 0) printf("0 %d %d", nums[0], nums[n-1]); else{ printf("%d",maxval); int s = index; do{ maxval -= nums[s]; s-=1; }while(maxval); while(s >= 0 && nums[s] == 0) s-=1; printf(" %d %d", nums[s+1], nums[index]); } return 0;}

网友回答:

#include

#include

int main() {

    int a[10000];

    int k, i, left, isright, isleft, NowSum = 0, MaxSum = -10000;

    scanf("%d", &k);

    for (i = 0; i < k; i++) {

        scanf("%d", &a[i]);

    }

 //用在线处理算法 

    for (i = 0; i < k; i++) {

        NowSum += a[i];

        if (NowSum < 0) {

            NowSum = 0;

            left = i + 1; //临时的序列最左边项

 

        } else if (NowSum > MaxSum) {

            MaxSum = NowSum;

            isright = i;  //序列最右边,如果最新的NowSum大于原来的MaxSum,就改变isright的值

            isleft = left; //最终的序列最左边

        }

    }

    if (MaxSum < 0)

        printf("0 %d %dn", a[0], a[k - 1]); //全部序列为0时

    else

        printf("%d %d %dn", MaxSum, a[isleft], a[isright]);

 

    return 0;

}


注:原文链接:https://blog.csdn.net/qq_45900103/java/article/details/104762162


希望能帮到你,满意请采纳!谢谢!


相关推荐

这是我写的代码在Dev c++结果是正确的,但是提交到PTA显示答案错误。我在哪个环节错了?求指导。

这是我写的代码在Dev c++结果是正确的,但是提交到PTA显示答案错误。我在哪个环节错了?求指导。

盒子游戏,游戏玩家专属个性阅读社区


©CopyRight 2010- 2020 BOXUU.COM Inc All Rights Reserved

鄂公网安备 35020302000061号- 鄂ICP备2020015574号-1