一维环型数组

一 题目及要求:

      题目:返回一个整数数组中最大子数组的和

      要求(新加):①如果数组A[0]...A[j-1]首尾相邻,允许A[i-1]...A[n-1],A[0]...A[j-1]之和最大;②同时返回最大子数组的位置。

二 设计思想:

     这个题目我们的思想还是延续以前一维数组的思想,只不过做了一点点改变,比如数字是五个,1,2,3,-1,-1.我们开辟的数组空间则是10个,

将这五个数再存一遍,也就是1,2,3,-1,-1,1,2,3,-1,-1.使用循环,是每次的循环数都数五个,比如第一次循环找出1,2,3,-1,-1中的

连续最大和,第二次循环则找出2,3,-1,-1,1中的最大连续数,以此类推。

三 实验代码

   

#include<iostream.h>
#include<time.h>
#include<stdlib.h>
int main()
{
    int arry[20];
    int start,end,i;
    long sum,max;
    cout<<"Please input 10 numbers:"<<endl;
    for( i=0;i<10;i++)
    {
        cin>>arry[i];
        arry[i+10]=arry[i];
    }
    max=arry[0];
    start=0;
    end=0;
    for(int j=0;j<10;j++)
    {
        sum=0;
        for(int k=j;k<10+j;k++)
        {
            sum=sum+arry[k];
            if(sum>max)
            {
                max=sum;
                start=j+1;
                end=k+1;
            }
        }
    }
    cout<<"MAX IS"<<" "<<max<<endl;
    cout<<"START:"<<"The"<<" "<<start<<"th"<<" "<<"number"<<"    "<<"END:"<<"The"<<" "<<end%10<<"th"<<" "<<"number"<<endl;
    cout<<"These numbers are:";
    for(int c=0;c<end-start+1;c++)
    {
        cout<<arry[start+c-1]<<"  ";
    }
}

四 实验截图

    

五 实验感想

    这次实验我们最大的感想就是,如果一个程序搞懂了,再加一些条件,再做一些改变,都可以从最原始的程序找到突破口,

这次程序我们的主要思想和上次没有什么区别,只做了小改变就成功了,当堂就编了出来,所以也很兴奋,当然和搭档聪明的

脑袋也脱不开关系。

原文地址:https://www.cnblogs.com/shishi1993-/p/4378389.html