返回一个整数数组中最大子数组的和
设计思路 :原本打算利用指针创建数组,然后根据for语句一次求出各个数组的和,后来感觉
这样做太复杂,只能求助荣道,利用他的思路,直接计算各个数组的和,再与最大值比较。
项目计划总结 | ||||
姓名: | 张少朋 | 日期:2015/3/24 | ||
找突破口 | 设计思路 | 编程 | 总结心得 | |
星期六 | 60分钟 | 20分钟 | 0 | 0 |
星期日 | 0 | 30分钟 | 30分钟 | 0 |
星期一 | 0 | 45分钟 | 10分钟 |
代码:
#include<iostream> #include<ctime> using namespace std; void main() { int a[10]; int f; int i, j, k; int sum, max = -100; int m, n; cout << "请输入数值范围:"; cin >> f; srand((unsigned)time(NULL)); for (i = 0; i<10; i++) { a[i] = (rand() % 2 ? -1 : 1)*rand() % f; cout << a[i] << " "; } cout << endl; for (i = 0; i<10; i++) { for (j = 0; j <= i; j++) { sum = 0; for (k = j; k <= i; k++) sum = sum + a[k]; if (sum>max) { max = sum; m = j; n = i; } } } cout << "子数组的最大值为:" << max << endl; cout << "子数组是第" << m + 1 << "个数,到第" << n + 1 << "个数。" << endl; cout << "子数组是:"; for (i = m; i <= n; i++) { cout << a[i] << " "; } cout << endl; }
截图结果:
个人总结:取的最大值没有在数组循环当中,m,n的取值为i,j。编程需要的是耐心,只有细节才能决定一切,不能只知道大概就以为自己学会了,引以为戒。