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

     1 #include<iostream>
     2 #include<time.h>
     3 #define N 100                            //设定数组的最大个数为100
     4 using namespace std;
     5 int main()
     6 {    
     7     srand((unsigned)time(NULL));         
     8     int num[N],arr[N][2];               //num[]用于存放数组,arr[i][0]是指不包括num[i]之前最大子数组的和,arr[i][1]是指包括num[i]的最大子数组的和
     9     int Num,Max;                        //Num是指数组的长度,Max用来存放最大和
    10     cout<<"请输入数组的长度:"<<endl;
    11     cin>>Num;
    12     cout<<"这个数组为:"<<endl;
    13     for(int i=0;i<Num;i++)              //随机生成一个数组
    14     {
    15         num[i]=-20+rand()%50;
    16     }
    17     for(int i=0;i<Num;i++)
    18     {
    19         cout<<num[i]<<" ";
    20     }
    21     cout<<endl;
    22     cout<<"请输入这个数组的最大子数组和为:"<<endl;
    23     arr[1][0]=0;
    24     arr[1][1]=num[1];                          //初始化arr[i][0],arr[i][1]
    25     for(int i=0;i<Num;i++)                     //采用递归的方式来求子数组的最大和
    26     {
    27         arr[i][0]=max(arr[i-1][0],arr[i-1][1]);             //调用max函数计算不包含num[i]子数组之和最大值
    28         arr[i][1]=max(arr[i-1][1]+num[i],num[i]);           //调用max函数计算包含num[i]子数组之和最大值
    29         Max=max(arr[i][0],arr[i][1]);
    30     }
    31     cout<<Max<<endl;
    32 }

    一、实验思路:

    1.定义一个整型数组num[n],随机生成数组中元素的值

    2.定义一个二维数组arr[n][2],arr[i][0]不包含num[i]子数组之和最大值,arr[i][1]包含num[i]子数组之和最大值
    3.随机生成数组num[n]
    4.采用循环递归的方式,调用max函数计算arr[i][0],arr[i][1],计算包含数组元素本身和不包含本身的前子数组最大和的情况,将他们之中的最大值赋给Max

    二、实验测试:

    三、实验日志

    项目记录 日志:

     

    听课

    编写程序

    阅读相关书籍

    网上查找资料

    日总计

    周一

    2

    0

    0

    0

    2

    周二

    0

    1

    1

    0

    2

    周三

    0

    3

    0.5

    1

    4.5

    周四

    2

    0.5

    0.5

    0

    3

    周五

    0

    3

    0.5

    1

    4.5

    周六

    0

    1

    0

    1

    2

    周日

     

     

     

     

     

    周总计

    4

    8.5

    2.5

    3

    18

    时间记录日志

    日期

    开始 时间

    结束时间

    中断时间

    净时间

    活动

    备注

    星期一

    14:00

    16:00

    10

    100

    上课

    软件工程

    星期二

    16:00

    17:00

    0

    60

    编程

    数组问题

     

    19:00

    20:00

    0

    60

    阅读书籍

     

    构建之法

    星期三

    13:00

    17:00

    60

    180

    编程

     

     

    19:00

    21:00

    30

    90

    阅读书籍

    构建之法

    星期四

    14:00

    16:00

    10

    100

    上课

    软件工程

     

    19:00

    20:00

    0

    60

    编程 查找资料

    数组问题

    星期五

    13:00

    17:00

    60

    180

    编程

    数组问题

     

    17:00

    18:00

    0

    60

    上网

    查资料

    星期六

    12:00

    14:00

    30

    90

    编程

    数组问题

    缺陷记录日志:

    日期

    编号

    类型

    引入阶段

    排除阶段

    修复阶段

    修复缺陷

    3/23

    1

    求最大和阶段

     

     

    30min

     

    考虑到时间复杂度的问题,不能用两个嵌套的循环,还有算法的设计,采用循环递归

    2

    数组长度的宏定义

     

     

    2min

     

    数组长度在宏定义是应该用N,二不是小写

    四、实验总结:

    通过此次实验,是我的实验思路更加拓宽了一些,以前我设想实验思路时,总是找最麻烦的方法,想的比较肤浅,然而实现的算法比较复杂,在这次实验中,我借鉴老师上课讲的方法,和队友运用循环递归的方法很简单的就编出来了这个程序,这次实验不算难,就是看实现的算法 的复杂性;

    还有和队友的合作缩短了我们的编程时间,提高了效率,我体会到了组队合作的便利性。

    我的伙伴 张瑶:http://www.cnblogs.com/zhangyao999/

  • 相关阅读:
    APIO 2010 特别行动队 斜率优化DP
    洛谷 P2747 Canada Tour 周游加拿大 动态规划
    VIJOS-P1282 佳佳的魔法照片 排序
    [APIO2012]派遣 可并堆
    可并堆模板题-mergeable heap
    可并堆总结
    分治思想及树上点分治
    拉丁字母(英语)缩写
    区块链是什么?跟比特币有什么关系?
    究竟什么比特币?如何理解比特币?
  • 原文地址:https://www.cnblogs.com/luxin123/p/5322752.html
Copyright © 2011-2022 走看看