| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2031 人关注过本帖
标题:最大子段和!求错误指正!
只看楼主 加入收藏
关耳扛刀
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2018-9-27
结帖率:80%
收藏
已结贴  问题点数:4 回复次数:4 
最大子段和!求错误指正!
题目:给出一个数列(元素个数不多于 10000),数列元素均为负整数、正整数、0。请找出数列中的一个连续子数列(这个子序列可以为空序列),使得这个子数列中包含的所有元素之和最大.输出这个最大和。例如数列为 4,-5,3,2,4 时,输出 9 ;数列为 1 2 3 -5 0 7 8时,输出 16。说明:如果这个最大和是负数,那么取0为最终答案。
输入样例
7
1 2 3 -5 0 7 8
输出样例
16
问题:我自己写的代码交上去后测试的一些数据是对的,但是还是有测试数据是错误的,不知道代码错在哪了,求大神看一看!
#include<stdio.h>
int maxAdd(int list[],int n)
{
    int max;
    int sum,i,j,k;
    max=0;
    for(i=0;i<n;i++){
        for(j=i;j<n;j++){
            sum=0;
            for(k=i;k<=j;k++){
                sum=sum+list[k];
            }
            if(max<sum){
                max=sum;
            }
        }
    }
    return max;
}
int main()
{
    int n;
    int list[10001];
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&list[i]);
    }
    if(maxAdd(list,n)<0){
        printf("0\n");
    }
    else{
        printf("%d\n",maxAdd(list,n));
    }
    return 0;
}

搜索更多相关主题的帖子: 最大 数列 int list sum 
2019-03-01 21:44
幻紫灵心
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山咔咔里面
等 级:贵宾
威 望:53
帖 子:395
专家分:2640
注 册:2018-3-30
收藏
得分:2 
...遍历?这样试试。?
for(i=0;i<n;i++){
    sum=0;
    for(j=i;j<n;j++){
        sum=sum+list[j];
        if(max<sum){
            max=sum;
        }
    }
}

[此贴子已经被作者于2019-3-2 09:12编辑过]


saber,别哭.
2019-03-02 09:00
关耳扛刀
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2018-9-27
收藏
得分:0 
嗷这个我也试过,但是这个也有测试数据错误
100
-28 -20 0 -30 40 -37 -6 -22 40 2 38 -19 19 45 -21 25 -36 16 -41 11 26 -11 -45 29 -39 -7 -33 -29 2 -26 48 41 -38 0 -17 -20 30 -30 -49 29 49 23 -2 20 -32 -8 8 -6 10 -48 49 12 48 -9 8 9 -37 -33 4 -3 38 -11 26 4 29 -18 -5 -22 -50 1 43 -36 -46 16 21 -12 15 -3 13 -32 37 3 16 48 -31 16 47 -19 13 18 7 -27 18 -19 -1 44 -22 43 -34 19
这是他给出来的错误测试数据,所以我就很懵逼了
2019-03-02 10:37
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:336
专家分:1135
注 册:2014-4-13
收藏
得分:2 
int maxAdd(int list[],int n)
{
    int max;
    int sum,i;
    max=0;
    sum=0;
    for(i=0;i<n;i++){
       sum+=list[i];   
       if(max<sum)max=sum;   
       else if(sum<0)sum=0;               
    }
    return max;
}
2019-03-02 21:04
lxk1732942
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:450
专家分:425
注 册:2018-9-4
收藏
得分:2 
试下这个
程序代码:
int maxAdd(int list[], int n)
{
    int max = 0;
    int i = 0;

    while (i < n)
    {
        while (i < n && list[i] <= 0)
            i++;

        for (int j = i, sum = 0; j < n; j++)
        {
            sum += list[j];
            max = sum > max ? sum : max;
        }

        while (i < n && list[i] >= 0)
            i++;
    }

    return max;
}


[此贴子已经被作者于2019-3-3 11:25编辑过]

2019-03-03 11:23
快速回复:最大子段和!求错误指正!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015407 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved