关于求整数数组最大子数组和的设计文档
——杨波 崔海营
当看到问题时,我们首先选用了一个小例子进行分析,我们假设数组为1 ,2, 3, 4, 5,要求得所有子数组的个数为{[n*(n-1)]/2}+n,所以可算出该例子中所有子数组的个数是15。进而我们就讨论如何编码能够得到所有的子数组的和,然后再通过比较求得最大的子数组之和,进而得到最终结果。整个讨论过程如下图所示:
经过讨论后我们的到了如下的代码:
#include<iostream> using namespace std; int main() { int num[5]; int sum[15]; int k=0; int temp; int max; for (int i=0;i<5;i++) { cin>>num[i]; } for( i=0;i<5;i++) { temp=num[i]; sum[k]=temp; k++; for(int j=i+1;j<5;j++) { temp=temp+num[j]; sum[k]=temp; k++; } } max=sum[0]; for(int j=0;j<15;j++) { if(max<sum[j]) { max=sum[j]; } } cout<<"最大子数组和"<<max<<endl; return 0; }
并且经过测试可以得到正确的结果:
测试:5 -1 8 -5 9
可得到结果:最大子数组的和为16
在代码的编译测试阶段所遇到的问题:
1).头文件书写错误,可能是太粗心了;
2).变量j没有定义,编写时细心程度不够。