最大子数组和 10.11作业
设计思想:
在上次求最大子数组的基础上,增加一个求随机数的子函数,并且利用将随机数对2求余的方法,产生正、负数。
对随机数函数的取值范围进行控制,控制在int32范围内。
对代码进行运行和调试。
经过上面的思路和不断调试,可以产生1000个范围内的数并进行计算,求得最大子数组。
源程序代码:
1 #include<iostream> 2 #include<iostream> 3 #include<time.h> 4 #include<stdlib.h> 5 using namespace std; 6 #define NUM 1000 7 int DTGH_Sum(int a[],int n) 8 { 9 int sum = 0; 10 int *b = (int *) malloc(n * sizeof(int)); 11 b[0] = a[0]; 12 for(int i = 1; i < n; i++) 13 { 14 if(b[i-1] > 0) 15 b[i] = b[i - 1] + a[i]; 16 else 17 b[i] = a[i]; 18 } 19 for(int j = 0; j < n; j++) 20 { 21 if(b[j] > sum) 22 sum = b[j]; 23 } 24 delete []b; 25 return sum; 26 } 27 28 int main() 29 { 30 int a[1005]; 31 srand((unsigned)time(NULL)); 32 int i; 33 for (i = 0; i < 1000; i++) 34 { 35 int t; 36 t = rand()%2; 37 if(t==1) t=-1; 38 else t = 1; 39 a[i] = rand() * t; 40 cout<<rand()*t<<'\t'; 41 } 42 cout<<"最大子段和:"; 43 cout<<DTGH_Sum(a,1000)<<endl; 44 return 0; 45 46 }
运行结果截图
当子数组和超出int32范围时,结果并不确定,以下为三种情况截图
psp0级开发过程: