首尾相连数组

Posted oiu1010

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了首尾相连数组相关的知识,希望对你有一定的参考价值。

一、实验思路

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

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

二、实验代码

#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;

}

技术分享

技术分享

 

以上是关于首尾相连数组的主要内容,如果未能解决你的问题,请参考以下文章

首尾相连一维数组的最大子数组和

首尾相连求最大子数组和

九度oj 题目1527:首尾相连数组的最大子数组和

首尾相连数组

返回一个整数数组中最大字数组的和(一维数组首尾相连)

首尾相连求最大子数组