设计思想:
在上次求最大子数组的基础上,增加一个求随机数的子函数,并且利用将随机数对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<<' '; } cout<<"最大子段和:"; cout<<DTGH_Sum(a,1000)<<endl; return 0; }
运行图
当数据超过int 32 类型范围以后
和队友并肩作战的照片