羽隹九日 2023-11-10 22:49 采纳率: 50%
浏览 9

求最大子列和问题有一个测试点过不去

错误提示: 并列和对应相同i但是不同j,即尾是0
但是我已经试过去掉尾部或者不去掉尾部,都不行
以下是去掉尾部的代码,请看看到底是什么问题


#include<stdio.h>
#include<stdbool.h>
int a[10000], b[10000] = { 0 }, CountMax = 0;
bool flag0 = 1;
int MaxSubseqSum(int* a, int k)
{
    int SumTemp = 0, MaxSum = 0, Count = 0, i;
    for (i = 0; i < k; i++)
    {
        if (a[i] == 0) flag0 = 0;
        SumTemp += a[i];
        Count++;
        if (SumTemp > MaxSum) {
            MaxSum = SumTemp;
            b[Count - 1] = a[i];
            CountMax = Count;
        }
        else if (SumTemp <= 0)
        {
            SumTemp = 0;
            Count = 0;
        }
    }
    return MaxSum;
}
int main(void)
{
    int k, i, Ans;
    bool flag = 1;
    scanf("%d", &k);
    for (i = 0; i < k; i++)
    {
        scanf("%d", &a[i]);
    }
    Ans = MaxSubseqSum(a, k);
    if (CountMax == 0 && flag0 == 1) printf("0 %d %d", a[0], a[k - 1]);
    else
    {
        if (CountMax == 0 && flag0 == 0) printf("0 0 0");
        else
            printf("%d %d %d", Ans, b[0], b[CountMax - 1]);
    }
    return 0;
}
  • 写回答

2条回答 默认 最新

  • 2301_80939902 2023-11-11 07:56
    关注

    我推测可能是在处理全为0的测试用例时出现问题。根据代码逻辑,如果最大子序列和为0且flag0为1,即表示输入序列全为0,但输出部分缺少相应的处理。
    为了解决这个问题,我们可以在输出部分做一些修改。具体来说,在最大子序列和为0且flag0为1的判断条件下,添加输出序列的范围为a[0]和a[k-1]即可

    评论

报告相同问题?

问题事件

  • 创建了问题 11月10日

悬赏问题

  • ¥15 delphi indy cookie 有效期
  • ¥15 labelme打不开怎么办
  • ¥35 按照图片上的两个任务要求,用keil5写出运行代码,并在proteus上仿真成功,🙏
  • ¥15 免费的电脑视频剪辑类软件如何盈利
  • ¥30 MPI读入tif文件并将文件路径分配给各进程时遇到问题
  • ¥15 pycharm中导入模块出错
  • ¥20 Ros2 moveit2 Windows环境配置,有偿,价格可商议。
  • ¥15 有关“完美的代价”问题的代码漏洞
  • ¥15 请帮我看一下这个简易化学配平器的逻辑有什么问题吗?
  • ¥15 暴力法无法解出,可能要使用dp和数学知识