• 软件工程课后作业:返回一个环形整数数组最大子数组的和


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

    二、要求:

    (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;
    }
    五:结果截图:

    团队照片:

     
  • 相关阅读:
    [Canvas]RPG游戏雏形 (地图加载,英雄出现并移动)
    [Canvas]计时表/秒表
    [Canvas]新版箴言钟表
    [Canvas]用透明PNG图在背景上画前景能不遮挡背景
    [Canvas]动态背景
    [Canvas]更多的球
    [Canvas]碰撞球 增加小球间碰撞检测
    [Canvas]碰撞球
    [Canvas]越来越近的女孩
    [Canvas]走近的女孩
  • 原文地址:https://www.cnblogs.com/haodong9/p/9906611.html
Copyright © 2020-2023  润新知