用c++实现环形数组的最大子数组的和

分析:对环形数组确定首元素,从而变成一位数组。因为有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;
}

结果截图:

实验总结:其实循环数组和一维数组本质上是一样的,程序上只是增加了一个循环。

 

posted on 2018-11-03 16:19  数理小牛  阅读(555)  评论(0编辑  收藏  举报

导航