- 刚开始的思路:从第一个元素加第二个,加第三个一直加到最后一个,然后比较从第一个元素相加的子列和中最大的和然后用数组记录下来;再然后从以第二个元素为首的子列和进行比较,记录下来以第二个元素为首的子列和的最大子列和。依次进行,将以每一个元素为首的最大子列和记录下来之后再进行比较,选出最大子列和。然后如果输入的元素均为负数则打印“0”。这样实现代码之后发现要定义很多数组,变量,设置很多循环,当然最后答案也容易出错,而且错误很难发现
- 看了其他代码之后发现第二种思路:让元素从头开始相加,如果是负数那就将和重新赋值为0(这样也保证了全是负数打印“0”的一种情况),再设置一变量为最大子列和,和当前的和进行比较,不断赋值最大子列和。最后输出最大子列和
#include<stdio.h>
#define N 100000
int main()
{
int n,i,a[N]={0};
int MAX=0;
int sum=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)
{
sum+=a[i];
if(sum>MAX)
MAX=sum;
else if(sum<0)
sum=0;
}
printf("%d",MAX);
}