您的位置:首页 > 其它

首尾相连数组

2016-03-27 15:07 162 查看
一、实验思路

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

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

二、实验代码

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

}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: