标签:
一、设计思想:
首先要随机生成一定的随机数,然后通过对数组赋值,再求出子数组之和,比较哪个数组之和最大,如果为负值即取消赋值,在这个基础之上,重新算出最大子数组之和,最后输出最大和以及最大子数组。
二、源代码:
#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;
}
三、出现的问题:
这次的实验代码跟上次的一样,只是测试数据的时候出现了些许问题。
四、实验截图:



五、实验总结:通过这次的跟同学合组完成的实验,也促使我完成了这一阶段,跟同学之间好好配合很重要,我跟刘伯建一块完成的这项实验同时也有一定的乐趣。下面是我跟他的合照

标签:
原文地址:http://www.cnblogs.com/itlangguojie/p/4385382.html