2016sdau课程练习专题三 1001

来源:互联网 发布:网络课程模板 编辑:程序博客网 时间:2024/04/27 23:31

1.题目编号

1001

2.简单题意

给你一组数,求出最大的子序列的和,并说出起始位置

3.解题思路

该题目要求求出最大的子序列的和,因此要找出此组数中最大的连续子序列,前i项中只要大于0就可以加入子序列,若后续数字的和也大于0则继续相加,直到求出最大值,同时在相加过程中,记录数字位置

4.感想

上课老师讲的例题,按照例题讲解来解的题,但第一次做总是有些错误

5.代码

#include<iostream> 

#include<stdio.h>

using namespace std;

int main()
{
    int i,a=1,T,s,e,n,x,M,N,max;
    scanf("%d",&T);
    while(T--)
    {
       scanf("%d",&n);
       for(i=1;i<=n;i++)
       {
         scanf("%d",&M);
         if(i==1)
         {
            max=N=M;
            x=s=e=1;
         }
         else {
             if(M>M+N)
             {
                N=M;
                x=i;
             }       
             else N+=M;
              }
         if(N>max)
           max=N,s=x,e=i;
       }
       printf("Case %d:\n%d %d %d\n",a++,max,s,e);
       if(T)printf("\n"); 
    }
    return 0;
}

0 0
原创粉丝点击