成员:禹慧慧 http://www.cnblogs.com/yhhzxcvbnm/
一、 题目要求:返回整数数组中最大的子数组的和
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个数组,每个子数组都有一个和。
将数组连成环求最大的数组。
二、 设计思路:
这次实验是在上次实验的基础上做的,要将数组组成一个环的话这次实验只需要将数组的内容复制一遍,将数组数量由原来的N变为N+N,定义j用它来保存数组开始的位置数组结束的位置为N+j;定义Array_max[]记录,每一个圆环中的最大的子数组之和,运行结束后,比数组中的最大的数值并输出;其中大数组的保存和输出只需要加上
long long Array_max[1000]
用来生成32位数组:
Array_a[i]=(RAND16 << 16) + RAND16;
三、 代码:
#include<iostream>
#include<time.h>
#define RAND16 ((rand()<<1) + (rand()&1))
using namespace std;
int main()
{
srand(time(0));
_int32 Array_a[2000];
long long Array_max[1000];//存放每个子数组的最大数组之和
long long arrayOfmax;//存放最后结果最大数
int N;//随机生成数组元素个数
N=rand()%1000+1;
cout<<"The number of array:"<<N<<endl;
for(int i=0;i<N;i++)
{
Array_a[i]=(RAND16 << 16) + RAND16;//生成32位数组元素
}
//将数组复制一遍加宽数组的长度
for(int i=0;i<N;i++)
{
Array_a[N+i]=Array_a[i];
}
for(int i=0;i<N;i++)
{
cout<<Array_a[i]<<" ";
if((i+1)%5==0){cout<<endl;}
}
cout<<endl;
//求每个圆环的N个数组的最大的子数组
for(int j=0;j<N;j++)
{
long long max=0;
long long sum=0;
for(int i=j;i<(N+j);i++)
{
sum+=Array_a[i];//将每位求和赋给sum
if(Array_a[i]>=0)
{
if(max<sum)
{
max=sum;
}
}
if(sum<0)
{
sum=0;
}
}
if(max==0)
{
max=Array_a[0];
for(int i=j;i<N+j;i++)
{
if(Array_a[i]>max)
max=Array_a[i];
}
}
Array_max[j]=max;
}
cout<<"The max array is:";
arrayOfmax=Array_max[0];
for(int k=1;k<N;k++)
{
if(arrayOfmax<Array_max[k])
{
arrayOfmax=Array_max[k];
}
}
cout<<arrayOfmax<<endl;
return 0;
}
截图:
四、 体会:这次实验是在第一次的基础上实现的,只需要做一些小小的改动,用循环来实现就能成功,但是这次实验开始运行还是有很多问题,经过队友的查看发现只是大括号的位置放错了,还是有一些小马虎。~~~~(>_<)~~~~
项目计划日志(单位: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
| 程序最后的位置输出不成功
|