【问题标题】:an exercice of sum in list列表中总和的练习
【发布时间】:2021-03-19 13:28:23
【问题描述】:

你好,我正在尝试解决一个关于列表中最大和的数字序列的练习: 我需要编写一个(非递归)函数来返回列表中最大的数字总和。 例子: 在列表中:[-1,4,-10,9,14,-4] 需要返回 23,因为 9+14=23 及其在此列表中的最大总和。 我是 C 的初学者,不知道如何在 C 中使用带有列表的 deboguer? 你能帮我理解我的问题在哪里吗?

int sum_lst(int lst[],int debut,int fin){
    int i=debut,sum=0;
    for (i;i<fin;i++){
        sum+=lst[i];
    }
    return sum;
}
int max_sum(int lst[],int n){
    int i=n;
    static int sum;
    int j=0;
    for (i;i>0;i--){
        for (j;j<n;j++){
            if (sum_lst(lst,j,i)>sum){
                sum= sum_lst(lst,i,j);
            }
        }
    }
    return sum;
}

【问题讨论】:

  • Bonjour :),您应该首先找到两个最大的数字并将它们相加。最好不给你答案(很简单)
  • 1> 对列表进行降序排序(可能使用库排序)2> 获取前两个项目(如果降序排序,则获取最后两个)3> 瞧
  • @DDS [10, -20, -30, 40, -50] 的输出应该是什么?
  • 不知道如何使用调试器?那我们来学习吧! debugging - What is a debugger and how can it help me diagnose problems? - Stack Overflow
  • 50,当然:排序后的向量将是[50, 40, -20, -30, -50],但这取决于您如何实现排序的比较功能。记住:如果标准库有它的功能,就使用它。

标签: arrays c list sum


【解决方案1】:
  • 您忘记在for (j;j&lt;n;j++){ 的每个循环之前初始化j
  • 您错误地将ij 交换为sum= sum_lst(lst,i,j);
  • sum 没有被初始化,所以如果max_sum 被多次调用或者给出了一个包含所有负元素的数组,结果可能是错误的。

固定代码:

int sum_lst(int lst[],int debut,int fin){
    int i=debut,sum=0;
    for (i;i<fin;i++){
        sum+=lst[i];
    }
    return sum;
}
int max_sum(int lst[],int n){
    int i=n;
    static int sum;
    int j=0;
    if (n<=0) return 0;
    sum = lst[0]; /* initialize sum */
    for (i;i>0;i--){
        for (j=0;j<n;j++){ /* initialize j */
            if (sum_lst(lst,j,i)>sum){
                sum= sum_lst(lst,j,i); /* don't swap i and j */
            }
        }
    }
    return sum;
}

【讨论】:

  • 我不明白你为什么说我交换了 i 和 j i 虽然它很好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
  • 2020-08-22
  • 1970-01-01
  • 2013-09-27
  • 1970-01-01
相关资源
最近更新 更多