1.设计思想

首先将随机生成的数存入一个数组中,然后计算每个子数组的和,定义一个二维数组记录和,该二维数组第一行表示一个数的行,第二行为相邻两个数相加的和的行,以此类推将所有的和存入,并将所有子数组的和进行输出。找出最大的子数组的和记录它的坐标及m和n,将最大数组的和输出,并对该和所对应的子数组中的数进行输出。

2.源程序

#include <iostream>
using namespace std;
#define N 20

void main()
{
int a[N],b[N][N]={0},k=0;

cout<<"生成的数组为:";
for(int i=0;i<N;i++) //生成数组里的随机数
{
a[i]=rand()%100-50;
cout<<a[i]<<" ";
}
cout<<endl;

for(int i=0;i<N;i++)
{
for(int j=0;j<N-i;j++)
{
int k=1,m=j;
while(k<=i+1)
{
b[i][j]+=a[m];
m++;
k++;
}
}
}

cout<<"各子数组的和分别为:";

for(int i=0;i<N;i++)
{
for(int j=0;j<N-i;j++)
{
cout<<b[i][j]<<" ";
}
}
cout<<endl;

int m=0,n=0;
for(int i=0;i<N;i++)
{
for(int j=0;j<N-i;j++)
{
if(b[i][j]>b[m][n])
{
m=i;
n=j;
}
}
}
cout<<"最大的和为:"<<b[m][n]<<endl;
cout<<"最大子数组中的数为:";
for(int i=n;i<=n+m;i++)
cout<<a[i]<<" ";
cout<<endl;
}

3.结果截图

 

4.总结

开始的时候有一个思想,但是想了很久发现比较难实现,后来又琢磨了很久最终实现,在这个过程中对于将每个子数组的和存在二维数组中遇到了难题,还有就是子数组的输出过程中。以后想问题还是要思路清晰,认真思考,也尽可能的在纸上进行演算让自己的思维更明白些。

5.

(1)

活动

上课

编写代码

看书

休息娱乐

总计

 周一

300

 

 

 

300

    周二

400

 

 

 

400

周三

100

 

 

 

100

周四

400

 

 

 

400

周五

200

30

 

300

530

周六

 

60

 

300

360

周日

 

120

60

200

380

总计

1400

310

60

800

2570

(2)

  日期

开始时间

结束时间

中断时间

净时间

活动

备注

21/3

22:00

23:00

22:40

40

找思路

有一点想法

22/3

14:00

14:40

 

40

找思路

用二维数组存储和

 

21:50

2300

 

70

编程

但是在二维数组求和那卡住了

23/3

10:30

12:30

 

120

编程

 数组求和做出来,但是子数组输出有点不会

 

16:00

1730

 

90

编程、测试

 解决了问题,测试成功

(3)

日期

编号

类型

引入阶段

排除阶段

修复时间

修复缺陷

22/3

1

二维数组定义

编码

编译

45

自己在纸上举例子进行了最后的完善定义

   22/3

2

循环混乱

编码

编译

120

经过思考进行改进

posted on 2015-03-23 17:58  menghuanzhixing  阅读(169)  评论(1编辑  收藏  举报