首页 > 技术文章 > 首尾相连数组

dgj1314 2016-03-27 15:10 原文

 

一、实验思路

 

   按要求随机产生几个数,然后先求数组的最大子数组的最大值,然后再比较他们的最大值求出整个子数组的最大子数组和

 

  丁官甲:程序编码和思路讨论                   吴论:思路讨论,代码编程后的测试和审核

 

二、实验代码

 

#include<iostream.h>

 

#include<stdlib.h>

 

int Maxsum(int *a,int n)//一维数组的求最大

 

{

 

   int tempstart =0,sum=0,max=-1000;

 

   int i;   

 

  int start,end;  

 

  start=end=0;  

 

  for(i=0;i<n;i++)

 

   {

 

        if(sum<0)

 

      {

 

        sum=a[i];

 

        tempstart=i;

 

      }

 

      else

 

      {

 

        sum+=a[i];

 

         }

 

      if(sum>max)

 

      {

 

        max=sum;

 

        start=tempstart;

 

        end=i;

 

      }  

 

       } //

 

   cout<<"start="<<start<<endl<<"end="<<i<<endl;

 

   return max;

 

}

 

int main()

 

{

 

    int b[10000];

 

    int max[10000];

 

    int num,i;

 

     cout<<"输入数组成员个数:";

 

    cin>>num;

 

    for(i=0;i<num;i++)

 

    {

 

       b[i]=(rand()%1000)-500;

 

    }

 

    cout<<"输出数组:"<<endl;

 

     for(i=0;i<num;i++)

 

    {

 

       cout<<b[i]<<"\t";

 

    }

 

   cout<<endl; 

 

  for(i=0;i<(num-1);i++)  //将环状数组转换为一维数组

 

   {

 

      b[num+i]=b[i];

 

   }

 

   int d[1000],st,en;

 

   for(i=0;i<num;i++)   //将一维数组转换为n个最大子数组  

 

  {

 

        for(int j=0;j<num;j++)  

 

        {

 

        d[j]=b[i+j];

 

        max[i]=Maxsum(d,num);

 

        }

 

   }

 

   int maxm=max[0];//比较n个最大子数组的最大子数组的最大值

 

  for(i=0;i<num;i++)

 

   { 

 

      if( maxm>max[i])

 

      {

 

        maxm=max[i];

 

      }

 

   }

 

  cout<<"最大子数组和为:"<<maxm<<endl;

 

  return 0;

 

}

 

三、实验结果截图

 

推荐阅读