最大子列问题
思路:
1.定义ThisSum和MaxSum两个变量
2.用ThisSum存储遍历数组的和
3.如果ThisSum>MaxSum,则最大和变为ThisSum,将ThisSum赋值MaxSum
4.如果ThisSum<0,则舍去,ThisSum=0
代码实现:
#include<stdio.h>
int main()
{
int N;
while(scanf("%d",&N) != EOF)
{
int a[10000];
int ThisSum = 0,MaxSum = 0;
int i;
for (i=0;i<N;i++)
scanf("%d",&a[i]); //输入数组
for (i=0;i<N;i++)
{
ThisSum += a[i]; //遍历求和
if (ThisSum > MaxSum)//如果ThisSum > MaxSum,则最大和变为ThisSum
{
MaxSum = ThisSum;
}
else if (ThisSum < 0) //当ThisSum <0,则舍去ThisSum,因为最大和不可能为ThisSum
{
ThisSum = 0;
}
}
printf("%d\n",MaxSum);
}
return 0;
}