要求:输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。
设计思想:
1.用户随机输入10个数作为数组
2.根据二维数组作为子数组最大值的表示方式
3.用递推的方法成功找到子数组最大值
4.成功找到最大值与最大子数组
#include<iostream> #define N 10 using namespace std; void main() { int A[N]; //用户输入的数组 int B[N][N]; //存放所有的数组和 int i, j, k; int sum; cout << "输入" << N << "个数:" << endl; for (i = 0; i<N; i++) { cin >> A[i]; } cout << endl; for (i = 0; i<N; i++) { for (j = 0; j<N - i; j++) { sum = 0; for (k = j; k <= j + i; k++) { sum = sum + A[k]; B[i][j] = sum; } } } //最大子数组的位数 int max = A[0]; int x, y; for (i = 0; i<N; i++) { for (j = 0; j<N - i; j++) { if (max<B[i][j]) { max = B[i][j]; x = i; y = j; } } } cout << "最大子数组之和为:" << max << endl; cout << "最大子数组为:"; for (i = 0, j = y; i <= x; i++, j++) cout << A[j] << " "; }
总结:
本次实验运用到动态规划,需要将Xi-Xi+1的结果作比较然后得出最后结果
结对开发伙伴:朱建颖 http://www.cnblogs.com/zjy666