分析:对环形数组确定首元素,从而变成一位数组。因为有n个元素,所以有n种情况
如图:
程序代码:
#include<iostream> using namespace std; int max_sum1(int a[],int n) { int max_sum_h=a[0]; int t,k=n-1; while(k) { int sum=a[0]; int max_sum=a[0]; for(int i=1;i<n;i++) { if(sum>0) //从第一个数开始判断是否为正数 { sum=sum+a[i]; //是正数,将和值(初始值为p【0】)和第i+1个数做和。 if(sum>max_sum) // 并判断是否为最大,是让其赋值给max_sum,并将子数组末位置改变。 { max_sum=sum; } } else { sum=a[i]; //是负数,将第i+1个数的值赋值给和值sum if(sum>max_sum)//并判断是否为最大,是让其赋值给max_sum,并将子数组初、末位置改变。 { max_sum=sum; } } } //每一种结果比较一次,一共比较n-1次 if(max_sum_h<=max_sum) { max_sum_h=max_sum; } //实现环形数组的变化成一维数组 t=a[n-1]; for(int i=n-1;i>0;i--) { a[i]=a[i-1]; } a[0]=t; //这个过程实现所有数字像左移动一位 k--; } return max_sum_h; //得到每次循环后的最大值 } int main() { int n,star=0,end=0; cout<<"please input the length of the array:"<<endl; cin>>n; int *p=new int[n]; cout<<"please input the int array:"<<endl; for(int i=0;i<n;i++) { cin>>p[i]; } cout<<"the max of the array:"<<max_sum1(p,n)<<endl; return 0; }
结果截图:
实验总结:其实循环数组和一维数组本质上是一样的,程序上只是增加了一个循环。