求最大子数组修改版10.11作业

设计思想:

   在上次求最大子数组的基础上,增加一个求随机数的子函数,并且利用将随机数对2求余的方法,产生正、负数。
    对随机数函数的取值范围进行控制,控制在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 类型范围以后

 

 

 

和队友并肩作战的照片

 

 

 

 

posted @ 2018-10-14 16:38  土1603-2苏雄  阅读(131)  评论(0编辑  收藏  举报