• 求最大子数组第二部


    
    

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

    
    

    输入一个整形数组,数组里有正数也有负数。

    
    

    数组中连续的一个或多个整数组成一个数组,每个子数组都有一个和。

    
    

    将数组连成环求最大的数组。

    
    

    二、设计思路:

    
    

    这次实验是在上次实验的基础上做的,要将数组组成一个环的话这次实验只需要将数组的内容复制一遍,将数组数量由原来的N变为N+N,定义j用它来保存数组开始的位置数组结束的位置为N+j;定义Array_max[]记录,每一个圆环中的最大的子数组之和,运行结束后,比数组中的最大的数值并输出;其中大数组的保存和输出只需要加上

    
    

    long long Array_max[1000]

    
    

    用来生成32位数组:

    
    

    Array_a[i]=(RAND16 << 16) + RAND16;

    三、代码:

    
    
     1 #include<iostream>
     2 #include<time.h>
     3 #define RAND16 ((rand()<<1) + (rand()&1))
     4 using namespace std;
     5 int main()
     6 {   
     7     srand(time(0));
     8     _int32 Array_a[2000];
     9     long long Array_max[1000];//存放每个子数组的最大数组之和
    10     long long arrayOfmax;//存放最后结果最大数
    11     int N;//随机生成数组元素个数
    12     N=rand()%1000+1;
    13     cout<<"The number of array:"<<N<<endl;
    14     for(int i=0;i<N;i++)
    15     {
    16         Array_a[i]=(RAND16 << 16) + RAND16;//生成32位数组元素
    17     }
    18     //将数组复制一遍加宽数组的长度
    19     for(int i=0;i<N;i++)
    20     {
    21         Array_a[N+i]=Array_a[i];
    22     }
    23     for(int i=0;i<N;i++)
    24     {
    25         cout<<Array_a[i]<<"  ";
    26         if((i+1)%5==0){cout<<endl;}
    27     }
    28     cout<<endl;
    29     //求每个圆环的N个数组的最大的子数组
    30     for(int j=0;j<N;j++)
    31     {
    32         
    33         long long max=0;
    34         long long sum=0;
    35         for(int i=j;i<(N+j);i++)
    36        {
    37           sum+=Array_a[i];//将每位求和赋给sum
    38            if(Array_a[i]>=0)
    39           {
    40              if(max<sum)
    41             {
    42                max=sum;
    43             }
    44 
    45           }
    46              if(sum<0)
    47             {
    48                sum=0;
    49              }
    50        }
    51         if(max==0)
    52         {
    53             max=Array_a[0];
    54            for(int i=j;i<N+j;i++)
    55           {
    56             if(Array_a[i]>max)
    57              max=Array_a[i];
    58           }
    59         }
    60         Array_max[j]=max;    
    61   }
    62     cout<<"The max array is:";
    63     arrayOfmax=Array_max[0];
    64     for(int k=1;k<N;k++)
    65     { 
    66         if(arrayOfmax<Array_max[k])
    67         {
    68             arrayOfmax=Array_max[k];
    69         }
    70     }
    71     cout<<arrayOfmax<<endl;
    72 return 0;
    73     
    74 }
    
    
    

    四、 截图:
    五、 体会:这次实验是在第一次的基础上实现的,只需要做一些小小的改动,用循环来实现就能成功,但是这次实验开始运行还是有很多问题,经过队友的查看发现只是大括号的位置放错了,还是有一些小马虎。~~~~(>_<)~~~~

    六、项目计划日志(单位:h)

     

    听课

    编写程序

    阅读相关书籍

    网上查找资料

    日总计

    周一

    2

    0

    0

    0

    2

    周二

    0

    3

    0

    0.5

    3.5

    周三

    0

    3

    1

    0

    4

    周四

    2

    4

    0

    0

    6

    周五

    0

    4

    1

    1

    6

    周六

    0

    3

    0

    0

    3

    周日

    0

    2

    0

    0

    2

    周总计

    4

    19

    2

          1.5

    26.5

    七、时间记录日志:(单位:min):

    日期

    开始时间

    结束时间

    中断时间

    净时间

    活动

    备注

    星期一

    14:00

    15:50

    10

    100

    听课

    软件工程

    星期二

    19:00

    22:00

    0

    180

    网上查找资料 编写程序

    求最大的数组

    星期三

    15:00

    18:00

    0

    180

    编程和上网查找资料并且调试程序

    结对编程

    19:00

    20:00

    0

    60

    读书

    构建之法

    星期四

    14:00

    15:50

    10

    100

    听课

    软件工程

    19:00

    23:00

    0

    240

    编程

    求最大数组

    星期五

    16:00

    21:00

    60

    240

    编程上网查找资料

    结对编程

    21:30

    22:30

    0

    60

    看书

    构建之法

    星期六

    19:00

    22:00

    0

    180

    编程和写博客

    求最大数组2

    星期日

    19:00

    20:00

    0

    120

    编写程序和写博客

    求最大数组2

    八、缺陷记录日志:

    日期

    编号

    类型

    引入阶段

    排除阶段

    修复时间

    修复缺陷

    3/23

    1

    20

    编码

    调试

    20:00

    括号输出错误,运算不正确

    3/24

    2

    20

    编码

    调试

    19:00-23:00

    程序的正确结果数不出来,计算求和不正确,因为将最后的计算和放到大括号里边了

    3/26

    3

    20

    编码

    调试

    10:00

    括号的丢失和语法的错误。

    3/27

    4

    20

    编码

    调试

    19:00

    程序最后的位置输出不成功

  • 相关阅读:
    百度笔试1
    几只经典题目拿来瞅瞅
    批处理 使用500个线程并发下载远程文件
    小心使用静态属性
    linux链接数据库慢解决方法
    shell执行脚本路径设置
    servlet 的request对象获取用户请求路径
    如何在linux服务器上抓包?
    由验证下载服务器性能得到的启示
    java中如何获取当前文件的物理路径?
  • 原文地址:https://www.cnblogs.com/lvlan/p/5326741.html
Copyright © 2020-2023  润新知