设计思想:
在上次求最大子数组的基础上,增加一个求随机数的子函数,并且利用将随机数对2求余的方法,产生正、负数。
对随机数函数的取值范围进行控制,控制在int32范围内。
对代码进行运行和调试。
经过上面的思路和不断调试,可以产生1000个范围内的数并进行计算,求得最大子数组。
对随机数函数的取值范围进行控制,控制在int32范围内。
对代码进行运行和调试。
经过上面的思路和不断调试,可以产生1000个范围内的数并进行计算,求得最大子数组。

#include<iostream>
#include<iostream>
#include<time.h>
#include<stdlib.h>
using namespace std;
#define NUM 1000
int DTGH_Sum(int a[],int n) //动态规划法求子段和函数
{
int sum = 0;
int *b = (int *) malloc(n * sizeof(int)); //动态为数组分配空间
b[0] = a[0];
for(int i = 1; i < n; i++)
{
if(b[i-1] > 0)
b[i] = b[i - 1] + a[i];
else
b[i] = a[i];
}
for(int j = 0; j < n; j++)
{
if(b[j] > sum)
sum = b[j];
}
delete []b; //释放内存
return sum;
}
int main()
{
int a[1005];
srand((unsigned)time(NULL));
int i;
for (i = 0; i < 1000; i++)
{
int t;
t = rand()%2;
if(t==1) t=-1;
else t = 1;
a[i] = rand() * t;
cout<<rand()*t<<'\t';
}
cout<<"最大子段和:";
cout<<DTGH_Sum(a,1000)<<endl;
return 0;
}
运行图
当数据超过int 32 类型范围以后
和队友并肩作战的照片