解题思路:
用滑动窗口思想解决问题比较简单,不过这题不需要记明窗口,只需要判断当前序列的和
只要当前序列的和不小于0,当前序列就有成为和最大的可能
如果当前序列和小于零,一定会使下一个序列的和变小
所以此时要刷新序列起点,即令和重置为0
在所有序列和中记下最大值即为所求答案
参考代码:
#include <stdio.h> int main() { int n; //定义n scanf("%d", &n); //输入n int num; int ans = 0; //定义答案 int sum = 0; //定义序列和 while (n--) //循环n次 { scanf("%d", &num); //输入数字 sum += num; //加入序列和 ans = (ans > sum) ? ans : sum; //维持答案为最大 if (sum < 0) sum = 0; //若序列和小于0,刷新为0 } printf("%d\n", ans); //输出答案 return 0; }
过一段时间又看看,发现代码还是有 bug 的,比如如果输入的数据都为负数,答案就会是 0
主要是 ans 的初始化 ( 为 0 ) 不合理
题目里说了数据范围 -10000 <= A[i] <= 10000
那么可以给 ans 初始化为 -10001 ,也可以是 INT_MIN 或者 -0x3f3f3f3f
又或者先输入第一个数,把第一个输入的数作为ans 和 sum 的初始化
0.0分
14 人评分
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:324 |
点我有惊喜!你懂得!浏览:1329 |
简单的a+b (C语言代码)浏览:760 |
C语言训练-求1+2!+3!+...+N!的和 (C语言代码)浏览:536 |
字符串的输入输出处理 (C语言代码)浏览:926 |
C语言程序设计教程(第三版)课后习题6.8 (C语言代码)浏览:522 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:669 |
震宇大神的杀毒软件 (C语言代码)浏览:1079 |
单词个数统计 (C语言代码)浏览:1011 |
良心推荐——>题解1049:C语言程序设计教程(第三版)课后习题11.1 (C语言描述——简单明了,时间复杂度低)浏览:1285 |