2017年3月22日
1. 有点惭愧,数据结构的第一篇博客是3月10写的,距离现在,已经过去两周了。这篇是对上一篇博客的补充,上一篇没有做出Maximum Subsequence Sum这道题,过了这么久,想起了把它做了。
2. 题目如下:
3.
4. 我的答案如下:
int MaxSubseqSum4(int num[],int k)
{
int ThisSum=0,MaxSum=0;
int FistNum,LastNum=0;
int i;
int n=0,NegaNum=0;
int ThisSum_big;
for( i=0;i<k;i++)
{
if(num[i]<0)
NegaNum++;
if(num[i]==0)
n++;
}
if(NegaNum==k)
//全是负数,最大值为0,打印数列第一个和最后一个数
{
printf("%d %d %d\n" ,0,num[0],num[k-1]);
return 0;
}
if((n+NegaNum)==k)
{
printf("%d %d %d\n" ,0,0,0);
return 0;
}
for( i=0;i<k;i++) //找出最大子列和
{
ThisSum+=num[i];
if(ThisSum>MaxSum)
{
MaxSum=ThisSum;
LastNum=num[i]; //找出最大子列和的最后一个数
}
else if(ThisSum<0)
ThisSum=0;
}
ThisSum=0;
ThisSum_big=0;
for(int j=LastNum;j>=0;j--)
{
ThisSum+=num[j];
if(ThisSum>=ThisSum_big)
{
ThisSum_big=ThisSum;
FistNum=num[j]; //找出最大子列和的第一个数
}
}
printf("%d %d %d\n" ,MaxSum,FistNum,LastNum);
return 0;
}
int main(void)
{
int k;
scanf("%d",&k);
int *num=(int *) malloc (sizeof(int)*k);
for(int i=0;i<k;i++)
{
scanf("%d",&num[i]);
}
MaxSubseqSum4(num,k);
free(num);
return 0;
}
哎,现在都已经第四周了,我还在补第二周的作业,最近在忙着做电设的题目,有点力不从心,加油吧!