返回一个随机数组中的子数组中的数相加最大的和

设计思想:

  1. 随机生成数组(含有正数与负数)。
  2. 求所有子数组:按数组长度进行数组的划分(因为要求数组是连续的)。
  3. 计算所有子数组各自的和,并进行比较(先(按照数组长度)分开比较,最后再将前面比较出来的结果进行比较)得到最大值数组。

实现代码:

//返¤¦Ì回?最Á?大䨮子Á¨®数ºy组Á¨¦的Ì?和¨ª,ê?王ª?昭?博?,ê?3.22,ê?2015.

#include<iostream>

using namespace std;

#include<time.h>

 

//控?制?随?机¨²数ºy个?数ºy

#define N 6

 

void main()

{

         int a[N] , b[N] ;

         srand((unsigned int)time(0)) ;

         for(int i = 0 ; i < N ; i ++)

         {

                   a[i] = rand()%20 - 10 ;//随?机¨²生¦¨²成¨¦20以°?内¨²的Ì?数ºy最Á?终?得Ì?到Ì?-10到Ì?10之?间?的Ì?数ºy

         }

         for( int i = 0 ; i < N ; i ++)

         {

                   cout<< a[i] << " " ;

         }

         cout<<endl;

         //按ã¡ä照?数ºy组Á¨¦内¨²数ºy的Ì?个?数ºy分¤?别Àe求¨®最Á?大䨮和¨ª

 

         //每?个?数ºy组Á¨¦中D只?有®D一°?个?数ºy

         b[0] = a[0] ;

         for( int i = 0 ; i < N ; i ++)

         {

                   if( a[i] > b[0] )

                   {b[0] = a[i] ;}

         }

         //每?个?数ºy组Á¨¦中D只?有®D两¢?个?数ºy

         b[1] = a[0] + a[1] ;

         for( int i = 0 ; i < N - 1 ; i ++)

         {

                   if( (a[i] + a[i+1]) > b[1] )

                   {b[1] = a[i] + a[i+1] ;}

         }

         //每?个?数ºy组Á¨¦中D只?有®D三¨y个?数ºy

         b[2] = a[0] + a[1] + a[2] ;

         for( int i = 0 ; i < N - 2 ; i ++)

         {

                   if( (a[i] + a[i+1] + a[i+2]) > b[2] )

                            {b[2] = a[i] + a[i+1] + a[i+2] ;}

         }

         //每?个?数ºy组Á¨¦中D只?有®D四?个?数ºy

         b[3] = a[0] + a[1] + a[2] + a[3] ;

         for( int i = 0 ; i < N - 3 ; i ++ )

         {

                   if( (a[i] + a[i+1] + a[i+2] + a[i+3]) > b[3] )

                   {b[3] = a[i] + a[i+1] + a[i+2] + a[i+3] ;}

         }

         //每?个?数ºy组Á¨¦中D只?有®D五?个?数ºy

         b[4] = a[0] + a[1] + a[2] + a[3] + a[4] ;

         for( int i = 0 ; i < N - 4 ; i ++)

         {

                   if( (a[i] + a[i+1] + a[i+2] + a[i+3] + a[i+4]) > b[4] )

                            {b[4] = a[i] + a[i+1] + a[i+2] + a[i+3] + a[i+4] ;}

         }

        

         b[5] = a[0] + a[1] + a[2] + a[3] + a[4] +a[5] ;

        

         for( int i = 1 ; i < N ; i ++)

         {

                   if( b[0] < b[i])

                   {b[0] = b[i] ;}

         }

         //零¢?个?数ºy

         if( b[0] < 0 )

         {b[0] = 0 ;}

         //输º?出?最Á?后¨®结¨¢果?

         cout<< " 最Á?大䨮和¨ª为a:êo " << b[0] <<endl;

}

结果截图:

    

心得总结:

我觉得我的问题还是各种函数的运用不够熟练,不过这次的代码非常的别扭,想用两个for循环,除了这种方法,我实在没有别的好思路了,所以。。。。

代码记录:

#include<time.h>    srand((unsigned int)time(0));int a = rand()%100 ;//即求0到100之间的随机数

时间记录日志

学生:

王昭博

 

日期:

3/13/2015

 

教师:

王建民

 

课程:

PSP

 

 

 

 

 

 

 

日期

开始时间

结束时间

净时

活动

备注

3月13日

10点10分

12点

100分钟

讲师授课

 

3月13日

13点

13点20分

20分钟

编写程序

 

3月18日

16点

17点30分

90分钟

编写程序

 

3月18日

21点30分

22点

30分钟

制作时间记录日志模板

 

周活动总结表

姓名:

王昭博

 

日期:

3.22,2015

 

日期任务

听课

编程

 

 

日统计

周五

100分钟

 

 

 

100

周日

 

120分钟

 

 

120

阶段时间和效率

 

 

周数

3

 

不包括上一周:

 

3

 

 

 

总计

 

220

 

 

 

平均

 

30

 

 

 

最大

 

120

 

 

 

最小

 

100

 

 

 

以前各周的:2

3

 

 

 

总计

240

220

 

 

 

平均

40

30

 

 

 

最大

90

120

 

 

 

最小

20

100

 

 

 

           

缺陷记录日志

学生:王昭博

日期:3.22,2015

教员:王建民

程序号:3

日期

编号

类型

引入阶段

排除阶段

修复时间

修复缺陷

3.22,2015

1

函数

编程

编译

10分钟

 

 

 

描述:随机数缺少一个srand函数

 

 

 

 

原文地址:https://www.cnblogs.com/yuntianblog/p/4358019.html