zoukankan      html  css  js  c++  java
  • 考研编程练习----最大连续子序列

    题目描述:
        给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个,例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和为20。现在增加一个要求,即还需要输出该子序列的第一个和最后一个元素。
    输入:

        测试输入包含若干测试用例,每个测试用例占2行,第1行给出正整数K( K< 10000 ),第2行给出K个整数,中间用空格分隔。当K为0时,输入结束,该用例不被处理。

    输出:

        对每个测试用例,在1行里输出最大和、最大连续子序列的第一个和最后一个元素,中间用空格分隔。如果最大连续子序列不唯一,则输出序号i和j最小的那个(如输入样例的第2、3组)。若所有K个元素都是负数,则定义其最大和为0,输出整个序列的首尾元素。

    样例输入:
    6
    -2 11 -4 13 -5 -2
    10
    -10 1 2 3 4 -5 -23 3 7 -21
    6
    5 -8 3 2 5 0
    1
    10
    3
    -1 -5 -2
    3
    -1 0 -2
    0
    样例输出:
                 20 11 13
                 10 1 4
            10 3 5
            10 10 10
            -0 1 -2
            0 0 0
    经典代码 :
    #include<stdio.h>
    #define Max 10000
    int main(){
            int maxsofar;
            int maxendinghere;
            int begin,end,temp;
            int x[Max];
            int i,n;
            int count;

            while(scanf("%d",&n),n>0){
                    for(i=0;i<n;i++)
                            scanf("%d",&x[i]);
                    count = 0;
                    maxsofar = maxendinghere = 0;
                    begin = end = temp = 0;
                    for(i=0;i<n;i++){
                            if(x[i]<0) count++;
                            maxendinghere += x[i];
                            if(maxendinghere<=0){
                                    maxendinghere = 0;
                                    temp = i+1;
                            }
                            if(maxendinghere>maxsofar){
                                    maxsofar = maxendinghere;
                                    begin = temp;
                                    end = i;
                            }
                            if(maxendinghere==0&&maxsofar==0&&x[i]==0)
                                    end = begin = i;
                    }
                    if(count==n) printf("0 %d %d ",x[0],x[n-1]);
                    else
                            printf("%d %d %d ",maxsofar,x[begin],x[end]);
            }
    }


  • 相关阅读:
    课堂作业04 2017.10.27
    课程作业 03 动手动脑 2017.10.20
    课程作业 03 2017.10.20
    HDU 3974 Assign the task
    POJ 2155 Matrix
    POJ 2481 Cows
    HDU 3038 How Many Answers Are Wrong
    CS Academy Array Removal
    POJ_1330 Nearest Common Ancestors LCA
    CF Round 427 D. Palindromic characteristics
  • 原文地址:https://www.cnblogs.com/Alex0111/p/4597083.html
Copyright © 2011-2022 走看看