一、设计思想:
首先要随机生成一定的随机数,然后通过对数组赋值,再求出子数组之和,比较哪个数组之和最大,如果为负值即取消赋值,在这个基础之上,重新算出最大子数组之和,最后输出最大和以及最大子数组。
二、源代码:
#include<iostream> #include<ctime> #include<stdlib.h> using namespace std; void main() { int begin=0; //子序列的开头 int end=0; //子序列的结尾 int newsum=0; //当前子序列最大值 srand((unsigned)time(NULL)); //生成随机数 int a[10000], n; cout << "请输入数组里面包含数的个数:" << endl; cin >> n; for (int i = 0; i < n; i++) { a[i] = rand() % 100-50; } // 随机生成100以内的数组的值 int maxsum=a[0]; cout << "数组a[" << n << "]为:"; for (int i = 0; i < n; i++) { cout << a[i] << " "; } cout << endl; for (int i = 0; i<n; i++)//开始循环求子序列和 { newsum = newsum + a[i]; if (newsum > maxsum)//更新当前子序列的和 { maxsum = newsum; end = i; } if (newsum < 0)//假若当前子序列和为负,则舍弃 { begin = i + 1; newsum = 0; } } cout << "最大的子序列和为:" << maxsum << endl; cout << "最大的序列为:"; for (int k = begin; k <= end; k++) { cout << a[k] << " "; } cout << endl; }
三、出现的问题:
这次的实验代码跟上次的一样,只是测试数据的时候出现了些许问题。
四、实验截图:
五、实验总结:通过这次的跟同学合组完成的实验,也促使我完成了这一阶段,跟同学之间好好配合很重要,我跟刘伯建一块完成的这项实验同时也有一定的乐趣。下面是我跟他的合照
时间: 2024-10-23 20:34:42