浙江大学中国MOOC数据结构第一周编程题
思路:因为K小于等于100000,如果用数组,会占用很大的内存。因此,采用一边输入,一边求子序列和的方法。
代码如下:
#include<stdio.h>
#include<stdlib.h>
void MaxSequence(int n)
{
int i, temp = 0, Thissum = 0, Maxsum = 0, t;//temp记录输入的值是否全是负数,Thissum记录当前子序列的和,Maxsum记录最大子序列和,t记录输入的元素值
for (i = 0; i < n; i++)
{
scanf("%d", &t);
if (t > 0)//如果输入的值有整数,则把temp的值设置为1
{
temp = 1;
}
Thissum += t;
if (Thissum < 0)
{
Thissum = 0;
}
if (Thissum > Maxsum)//如果当前子序列大于最大子序列和,则将Thissum赋值给Maxsum
{
Maxsum = Thissum;
}
}
if (temp == 0)
{
printf("0");
}
else
{
printf("%d", Maxsum);
}
}
int main()
{
int n;
scanf("%d", &n);
MaxSequence(n);
return 0;
}
运行结果: