实验楼作业
输入一组整数,求出这组数字子序列和中的最大值,只要求出子序列中最大的和,不必求出最大值对应的序列。
最大子序列和:整数序列A1, A2,... An (可能有负数),求A1An的一个子序列AiAj,使得Ai到Aj的和最大。
例如:
序列:2,2,-3,4,5,6。则最大子序列和为15。
代码实现
#include <stdio.h>
int main()
{
int serial[] = {1,2,-3,4,5};//输入的序列
int max_sum = 0;//子序列的最大的和
int w,n;//w是外层循环,自子序列的第一个值;n是内层循环,在w的基础上加n,serial[w+n]就是子序列的第n个值
for(w=0;w<5;w++)//外层循环,数组每个元素都做一次子序列头
{
int msum = 0;//临时变量,每个子序列的和
for(n=0;n+w<5;n++)//在子序列的最后一个值,不超过数组最大下标时,就可以一直自加求和
{
msum += serial[w+n];
}
if(msum > max_sum)//如果有子序列和比之前的大,那就挑出最大的来
{
max_sum = msum;
}
}
printf("the max_sum is %d",max_sum);//输出结果
return 0;
}
运算结果
the max_sum is 9
总结感悟
说实话,自从工作以来,从未认真对待过算法与数据结构,入行半年多了,到9月的话算一整年。
算法与数据结构必须补上来。
今天是一个开始,万事开头难,只要开始了坚持下去,积分的力量你懂得。
上面的话很俗套,但是确为肺腑之言,我也明白了,为什么这么俗套的话,我们却经常看见有人提起
那正是因为,心中所感,是然。