• 首尾相连数组


    一、实验思路

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

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

    二、实验代码

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

        }

       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;

    }

  • 相关阅读:
    输入输出,数据类型,运算符
    queue与pair
    迪杰斯特拉算法学习
    IP地址/数字表示学习
    作业与进程的关系
    直写和回写学习
    OS中的时空局部性
    scanpy包的预处理函数学习
    keras编译与训练过程
    力扣:前缀和、差分题目
  • 原文地址:https://www.cnblogs.com/wulun/p/5325735.html
Copyright © 2020-2023  润新知