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

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

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

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

    结果截图:

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

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

    合作美图:

                                               

                                     (20163953 关甜欢     20163955 王美仪)

  • 相关阅读:
    error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 E:OCX
    JQUERY解析XML IE8的兼容问题
    IE11下,IIS7.5不自动生成__doPostBack事件
    IE11无法支持Forms认证,,,也就是无法保存COOKIE
    IIS7.5真变态,服务器时间格式导致不生成WebResource.axd
    django ajax MTV与MVC 多对多创建方式
    django F与Q查询 事务 only与defer
    模型层
    模板层(模板语法)
    django 路由层 伪静态网页 虚拟环境 视图层
  • 原文地址:https://www.cnblogs.com/shenzhenxi/p/9905036.html
Copyright © 2011-2022 走看看