#include<iostream>
using namespace std;
#define Nu 5
int main()
{
int max=0,s=0,t=Nu;
int a[Nu];
int b[Nu*(Nu+1)/2]={0};
int k;
cout<<"随机产生数组为:";
for(int i=0;i<Nu;i++)
{
k=rand()%2;
do
a[i]=rand();
while(a[i]>100);
a[i]=k==1?a[i]:-a[i];
max=a[i];
cout<<a[i]<<" ";
}
cout<<endl;
int M=0,N=Nu;
for(int i=0;i<Nu*(Nu+1)/2;i++)
{
for(int j=M;j<N;j++)
b[i]=b[i]+a[j];
if(b[i]>max)
{
max=b[i];
s=M;
t=N;
}
if(N==M+1)
{
N=Nu;
M=M+1;
}
else N=N-1;
}
cout<<"所有子数组和为:"<<endl;
for(int i=0;i<(Nu*(Nu+1)/2);i++)
cout<<b[i]<<endl;
cout<<"相邻子数组最大和为:"<<max<<endl;
cout<<"相应子数组为:";
for(int i=s;i<t;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
思路:随机产生5个数存在数组a里,定义数组b来存储子数组的和,求和先求以第一个随机数开头的所有情况,再求以第二个数开头的所有情况,以此类推,
例如:随机数为1,2,3,4,5;先求
1,2,3,4,5
1,2,3,4
1,2,3
1,2
1
这几个子数组的和,然后继续求
2,3,4,5
2,3,4
2,3
2
以此类推,用Max记录和的最大值,用s,t来记录子数组的头尾序号,最后输出。
总结:刚开始完全没思路啊,题都看不懂啊,后来思路有了,想过用二维数组,想过用函数自调用,想过用指针,但是能力有限啊,根本实现不出来,
只能想简单的了。。。后来还是在上课的时候开小差就突然想到现在这个了,回来就试了试,就做完了,呵呵还是挺开心的,本来打算去看别人的思路
了,后来还是自己想的,虽然比较简单,但起码是自己做的吧
周活动总结表(第三周)
活动 |
上课 |
编写代码 |
看书 |
休息娱乐 |
总计 |
周一 |
300 |
300 |
|||
周二 |
500 |
500 |
|||
周三 |
100 |
100 |
|||
周四 |
300 |
300 |
|||
周五 |
200 |
300 |
500 |
||
周六 |
45 |
300 |
345 |
||
周日 |
115 |
115 |
|||
总计 |
1400 |
115 |
45 |
600 |
2060 |
时间记录日志
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
21/3 |
23:10 |
23:20 |
10 |
找思路 |
完全没想出来 |
|
22/3 |
9:00 |
10:05 |
65 |
找思路 |
用函数自调用 |
|
10:05 |
12:00 |
115 |
编程 |
没做出来,就此搁置,很消沉 |
||
23/3 |
9:25 |
9:45 |
20 |
上课 |
走神重新找思路 |
|
10:10 |
11:30 |
80 |
编程、测试 |
呵呵哒,出来了 |
缺陷记录日志
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
22/3 |
1 |
函数自调用不会 |
编码 |
编译 |
未修复出来 |
|
22/3 |
2 |
循环混乱 |
编码 |
编译 |
2 |
|
3 |
变量赋值 |
编码 |
编译 |
1 |
填错了 |