m0_74260788 2023-02-10 13:18 采纳率: 86.4%
浏览 32
已结题

数组(一堆数组)程序运行练习


int i, max_sum, n, this_sum; 
int a[ ] = {-1, 3, -2, 4, -6, 1, 6, -1};
scanf("%d", &n);
max_sum = this_sum = 0;
for( i = 0; i < n; i++ ) {
    this_sum += a[i]; 
    if( this_sum > max_sum ) max_sum = this_sum; 
    else if( this_sum < 0 ) this_sum = 0;
}
printf("%d\n", max_sum);

输入8,输出7;
输入5,输出5;为啥呀!我两个都算错了

输入8,难道不是this-sum=-1+。+-1=4,然后max-sum=4 我同理得到输入5,输出0;是哪错了呢?

  • 写回答

4条回答 默认 最新

  • CodeBytes 2023-02-10 13:33
    关注

    代码中有一个小错误:

    int a[ ] = {-1, 3, -2, 4, -6, 1, 6, -1};
    修改为
    int a[8] = {-1, 3, -2, 4, -6, 1, 6, -1};
    

    因为数组 a 的大小是 8,但是没有在代码中明确指定。

    输入 8,输出 7,是因为代码实际上在计算从数组的第一个元素到第八个元素的最大连续和,即 3 + (-2) + 4 + (-6) + 1 + 6 + (-1) = 7。

    输入 5,输出 5,是因为代码实际上在计算从数组的第一个元素到第五个元素的最大连续和,即 3 + (-2) + 4 = 5。

    #include <stdio.h>
    
    int main() {
        int i, max_sum, n, this_sum;
        int a[8] = {-1, 3, -2, 4, -6, 1, 6, -1};
        scanf("%d", &n);
        max_sum = this_sum = 0;
        for(i = 0; i < n; i++) {
            this_sum += a[i];
            if(this_sum > max_sum) max_sum = this_sum;
            else if(this_sum < 0) this_sum = 0;
        }
        printf("%d\n", max_sum);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月18日
  • 已采纳回答 2月10日
  • 创建了问题 2月10日

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题