zoukankan      html  css  js  c++  java
  • 返回一个整数数组中最大子数组的和。

    要求:
    输入一个整形数组,数组里有正数也有负数。
    数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
    如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。
    同时返回最大子数组的位置。
    求所有子数组的和的最大值。
    设计思路:随机生成一个数组,然后求其最大子数组,从第一个元素开始排列,然后第二元素排列,依次排列,因为要求的是首尾相连所以再次以第个元素为首元素循环n个元素形成一个指定数目的数组,然后开始筛选最大子数组。
    程序代码:
    #include<iostream>
    using namespace std;
    void main()
    {
        int length;   //数组的个数
        int n;       //数组变化后的长度
        cout<<"请输入数组元素个数:"<<endl;
        cin>>length;
        n=2*length;   
        int *a=new int[n];  //定义数组
        cout<<"请输入数组的元素:"<<endl;
        for(int i=0;i<length;i++)// for循环依次输入数组的元素
        {
            cin>>a[i];
        }
        int max=a[0];   // 首先定义max并且赋予第一个数组中的元素值
        int s=0;   //定义s值,s值为数组元素之和并且与max值比较
        for( i=0;i<length;i++)
        {
            s=0;    
            for(int j=i;j<length+i;j++)
            {
                s=s+a[j];
                if(s>max)
                {
                    max=s;
                }    
            }
            a[length+i]=a[i];
        }
        cout<<endl;
        cout<<"最大子数组的和为:"<<endl;
        cout<<max<<endl;
    }
    运行结果:
     
    心得体会:C语言基础太差,好多都是抄别人的代码,并且思绪很混乱,特别是这次作业首尾相连就是想不出来如何实现,以后要加强这方面的知识。
    合作伙伴:鲁建伟
    照片
     
  • 相关阅读:
    [EOJ]2019 ECNU XCPC March Selection #1
    [模板]宏定义
    [POJ]poj1961,poj2406(KMP)
    [模板]KMP
    [CF]Avito Cool Challenge 2018
    [CF]Codeforces Round #528 Div.2
    [POJ]POJ1328(贪心)
    洛谷 P3808 【模板】AC自动机(简单版) 题解
    中科院的难题 题解
    【转】洛谷 P3722 [AH2017/HNOI2017]影魔 题解
  • 原文地址:https://www.cnblogs.com/wushao12345/p/9904795.html
Copyright © 2011-2022 走看看