zoukankan      html  css  js  c++  java
  • 软件工程课后作业:返回一个环形整数数组最大子数组的和

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

    二、要求:

    (1)输入一个整形数组,数组里有正数也有负数。
    (2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
    (3)如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。
    (4)同时返回最大子数组的位置。
    (5)求所有子数组的和的最大值。
    三,设计思路:
               如果把这个环形数组的每个连接处都割开,分别计算一下,求最大子数组的和,在哪个位置切开就是谁的最大子数组,所以我们可以看成是分开的这样一些普通数组的最大子数组的和,问题转换成我们之前的实验,只需要降维之后再用相同方法求得即可。
     
    四,项目代码:
    #include<iostream>
    #include<time.h>
    #define n 20
    using namespace std;
    void main()
    {
        int a[n],i,j,w=0,b[n][n],p1=0,p2=0,t,m;
        srand((int)time(0));
        for(i=0;i<n;i++)
        {
            a[i]=-rand()%36+25;
        }
        for(i=0;i<n;i++)
        {
            cout<<a[i]<<endl;
        }
        for(i=0;i<n;i++)
        {
            m=i;
            w=0;
            j=0;
            while(j<=n-1)
            {
                w+=a[m];
                b[i][j]=w;
                m++;
                if(m>n-1)
                {
                    m=0;
                }
                j++;
            }
        }
        t=b[0][0];
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                if(b[i][j]>t)
                {
                    t=b[i][j];
                    p1=i;
                    p2=j;
                }
            }
        }
        cout<<"最大子数组的值为:"<<t<<endl;
        cout<<"最大子数组中元素的位置为:"<<endl;
        i=0;
        while(i<=p2)
        {
            cout<<p1<<"  ";
            p1++;
            if(p1>=n)
            {
                p1=0;
            }
            i++;
        }
            cout<<endl;
    }
    五:结果截图:

    团队照片:

     
  • 相关阅读:
    Max Sum Plus Plus HDU
    Monkey and Banana HDU
    Ignatius and the Princess IV HDU
    Extended Traffic LightOJ
    Tram POJ
    Common Subsequence HDU
    最大连续子序列 HDU
    Max Sum HDU
    畅通工程再续
    River Hopscotch POJ
  • 原文地址:https://www.cnblogs.com/haodong9/p/9906611.html
Copyright © 2011-2022 走看看