标签:main int name 长度 组元 img for ima space
分析:
1.将环形数组,剪开变成一个一维数组。
2.用一维数组的最大子数组和解决。
对于一个环形数组,表示成一个一维数组总共有n种。如图所示:
程序代码:
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int n; 6 cout<<"请输入一维数组的长度:"; 7 cin>>n; 8 int *p=new int[n];//定义数组指针 9 cout<<"请依次输入数组元素:"<<endl; 10 for(int i=0;i<n;i++) 11 { 12 cin>>p[i]; 13 } 14 int t,m,*sum=new int[n],*max_sum=new int[n]; 15 //*sum储存子数组的和,*max_sum储存最大子数组的和 16 for(int i=0;i<n;i++) 17 { 18 sum[i]=p[0]; 19 max_sum[i]=p[0]; 20 for(int j=1;j<n;j++) 21 { 22 if(sum[i]>0)//从第二个数开始判断是否为正数 23 { 24 sum[i]=sum[i]+p[j]; //是正数,将和值(初始值为p【0】)和第i+1个数做和。 25 if(sum[i]>max_sum[i])// 并判断是否为最大,是让其赋值给max_sum,并将子数组末位置改变。 26 { 27 max_sum[i]=sum[i]; 28 } 29 } 30 else 31 { 32 sum[i]=p[j]; //是负数,将第i+1个数的值赋值给和值sum 33 if(sum[i]>max_sum[i]) //并判断是否为最大,是让其赋值给max_sum,并将子数组初、末位置改变。 34 { 35 max_sum[i]=sum[i]; 36 } 37 } 38 } 39 m=p[0];//环形数组转换成新的一维数组 40 p[0]=p[n-1]; 41 for(int k=0;k<n-1;k++) 42 { 43 t=m; 44 m=p[k+1]; 45 p[k+1]=t; 46 } 47 } 48 int max=max_sum[0];//max为所有最大子数组和的最大值 49 for(int i=1;i<n;i++) 50 { 51 if(max_sum[i]>max)//比较 52 { 53 max=max_sum[i]; 54 } 55 } 56 cout<<"最大子数组的和为"<<max<<endl;//输出 57 return 0; 58 }
测试截图:
实验总结:对于环形数组只需将其化简成一维数组形式,再对其求最大子数组的和即可,完全等价于一维数组。将其化简成几小步去做就简单很多了。
标签:main int name 长度 组元 img for ima space
原文地址:https://www.cnblogs.com/tansong/p/9901027.html