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.求所有子数组的和的最大值。

    设计思想:一维循环数组求最大子数组可以简化成一维不循环数组求最大子数组 。

    简化过程:将循环数组由某个位置剪开,展开成一维不循环数组。

    源代码:

     1 #include<iostream>
     2 #include<stdlib.h>
     3 #include<time.h>
     4 using namespace std;
     5 int main()
     6 {
     7     int i,j,n,b,p,sum,maxsum;
     8     int *a;
     9     cout<<"请输入数组的长度:"<<endl;
    10     cin>>n;//数组的长度
    11     cout<<"数组元素的最大取值:"<<endl;
    12     cin>>p;
    13     //如果为循环数组是以下操作
    14     a=new int[2*n-1];
    15     srand(time(NULL));
    16     cout<<"生成数组元素"<<endl;
    17     for(i=0;i<n;i++)
    18     {
    19         a[i]=rand()%(2*p+1)-p ;
    20         cout<<a[i]<<'	';//循环数组的生成为:
    21         if(i<n-1)
    22         {
    23             a[n+i]=a[i];
    24         }
    25         
    26     }
    27     cout<<endl;
    28     maxsum=sum=0;
    29     for(i=0;i<n;i++)//因为要将每个位置剪开展成的一维数组进行遍历比较需要两层循环
    30     {
    31         b=i;//每次剪开展开后的第一个数组元素的下标
    32         for(j=0;j<n;j++)
    33         {
    34             sum+=a[b++];
    35             if(sum<0)
    36             {
    37                 sum=0;
    38             }
    39             if(sum>maxsum)
    40             {
    41                 maxsum=sum;
    42             }
    43         }
    44         sum=0;//将每次展开的sum值归零
    45     }
    46     if(maxsum==0)//数组元素全为非负数时的处理
    47     {
    48         maxsum=a[0];
    49         for(i=0;i<n;i++)
    50         {
    51             if(maxsum<a[i])
    52             {
    53                 maxsum=a[i];
    54             }
    55         }
    56     }
    57     cout<<"最大子数组的和为:"<<maxsum<<endl;
    58     system("pause");
    59     return 0;
    60 
    61 }

    运行截图:

    总结体会:最开始时没有考虑到每次遍历展开子数组和sum的归零,试了几次含有正数时和都会出错,检查后发现问题,改正了。

    学习到了化繁为简的编程思想。

    合作美图:

                                                                                                                                                      

                                                                                                                                         (20163953 关甜欢     20163955 王美仪)

  • 相关阅读:
    window.parent 、window.top及window.self 详解
    js中的变量提升和函数提升
    IE不支持ES6语法的解决方案——Babel
    JavaScript 文件拖拽上传插件 dropzone.js 介绍
    C# DataTable 增加行与列
    group by 与 order by 一起使用的时候
    window.open传递多个参数
    Jquery EasyUI tree 的异步加载(遍历指定文件夹,根据文件夹内的文件生成tree)
    ASP.NET中调用百度地图API
    C# 读取Excel中的数据到DataTable中
  • 原文地址:https://www.cnblogs.com/guantianhuan/p/9905005.html
Copyright © 2011-2022 走看看