#include<stdio.h> #define N 1000 #define INF 10000 int maxsubsum(int * arr, int Size) { int maxSum = -INF; int sum = 0; for(int i = 0; i < Size; i++) { if(sum < 0) { sum = arr[i]; } else { sum += arr[i]; } if(sum > maxSum) { maxSum = sum; } } return maxSum; } int main() { int MSS; int i; int j=0; int arr[N]={0}; char c;//用来判断何时停止输入的 printf("input N number: "); for(i=0;i<N;i++) { scanf("%d",&arr[i]); scanf("%c",&c); j++;//计数器 if(c==' ')//打入回车则自动结束 { break; } } for(i=0;i<j;i++)//原数组打出屏幕 { printf("%d ",arr[i]); } printf(" "); MSS=maxsubsum(arr,j); printf("Mss=%d ",MSS); return 0; }
以上是修改后的代码。
原先的函数代码:
int maxsubsum(int a[N]) { int maxsum=0,thissum=0; int j; for(j=0;j<N;j++) { thissum+=a[j]; if(thissum>maxsum) maxsum=thissum; else if(thissum<0) thissum=0; } return maxsum; }
进行调试:
这就出现了错误
所以应该先将maxsum定义为负无穷。而sum不能赋值为0 ,而是a[i].
问题解决
当序列和大于32位时会溢出,可以将mss变量定义为long int 类型
周活动总结
10.14
听课 | 编写程序 | 查资料 | 日总计 | |
周三 | ||||
周四 | 2 | 1 | 0 | 3 |
周五 | ||||
周六 | ||||
周日 | 0 | 2 | 1 | 3 |
周总结 | 2 | 2 | 1 | 6 |
时间记录日志
日期 | 开始时间 | 结束时间 | 净时间 | 活动 |
10.11 | 10.00 | 12.00 | 120min | 听课,写课堂作业 |
10.14 | 9.00 | 12.30 | 3h | 编程并调试 |
附上照片