//禹慧慧 吕兰兰 2016.3.26 //将数组看成环形,首尾相接,数组元素个数最多1000,数组元素为32位,计算最大子数组的元素之和 #include<iostream> #include<time.h> #define RAND16 ((rand()<<1) + (rand()&1)) using namespace std; int main() { srand(time(0)); _int32 Array_a[2000]; long long Array_max[1000];//存放每个子数组的最大数组之和 long long arrayOfmax;//存放最后结果最大数 int N;//随机生成数组元素个数 N=rand()%1000+1; cout<<"数组元素个数为:"<<N<<endl; for(int i=0;i<N;i++) { Array_a[i]=(RAND16 << 16) + RAND16;//生成32位数组元素 } //将数组复制一遍加宽数组的长度 for(int i=0;i<N;i++) { Array_a[N+i]=Array_a[i]; } for(int i=0;i<N;i++) { cout<<Array_a[i]<<" "; if((i+1)%5==0){cout<<endl;} } cout<<endl; //求每个圆环的N个数组的最大的子数组 for(int j=0;j<N;j++) { long long max=0; long long sum=0; for(int i=j;i<(N+j);i++) { sum+=Array_a[i];//将每位求和赋给sum if(Array_a[i]>=0) { if(max<sum) { max=sum; } } if(sum<0) { sum=0; } } if(max==0) { max=Array_a[0]; for(int i=j;i<N+j;i++) { if(Array_a[i]>max) max=Array_a[i]; } } Array_max[j]=max; } cout<<"The max array is:"; arrayOfmax=Array_max[0]; for(int k=1;k<N;k++) { if(arrayOfmax<Array_max[k]) { arrayOfmax=Array_max[k]; } } cout<<arrayOfmax<<endl; return 0; }
组成员吕兰兰网址:http://www.cnblogs.com/lvlan/
原文:http://www.cnblogs.com/yhhzxcvbnm/p/5322985.html