藍橋杯訓練——最長遞增子序列
阿新 • • 發佈:2018-12-24
問題描述:最長遞增子序列
習題3.4 最長連續遞增子序列(20 分)
給定一個順序儲存的線性表,請設計一個演算法查詢該線性表中最長的連續遞增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最長的遞增子序列為(3,4,6,8)。
輸入格式:
輸入第1行給出正整數n(≤10
5
);第2行給出n個整數,其間以空格分隔。
輸出格式:
在一行中輸出第一次出現的最長連續遞增子序列,數字之間用空格分隔,序列結尾不能有多餘空格。
輸入樣例:
15
1 9 2 5 7 3 4 6 8 0 11 15 17 17 10
輸出樣例:
3 4 6 8
作者:何知令
習題3.4 最長連續遞增子序列(20 分)
給定一個順序儲存的線性表,請設計一個演算法查詢該線性表中最長的連續遞增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最長的遞增子序列為(3,4,6,8)。
輸入格式:
輸入第1行給出正整數n(≤10
5
);第2行給出n個整數,其間以空格分隔。
輸出格式:
在一行中輸出第一次出現的最長連續遞增子序列,數字之間用空格分隔,序列結尾不能有多餘空格。
輸入樣例:
15
1 9 2 5 7 3 4 6 8 0 11 15 17 17 10
輸出樣例:
3 4 6 8
作者:何知令
完成時間:2017年9月16日
程式碼:
/* 問題描述:最長遞增子序列 習題3.4 最長連續遞增子序列(20 分) 給定一個順序儲存的線性表,請設計一個演算法查詢該線性表中最長的連續遞增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最長的遞增子序列為(3,4,6,8)。 輸入格式: 輸入第1行給出正整數n(≤10 5 );第2行給出n個整數,其間以空格分隔。 輸出格式: 在一行中輸出第一次出現的最長連續遞增子序列,數字之間用空格分隔,序列結尾不能有多餘空格。 輸入樣例: 15 1 9 2 5 7 3 4 6 8 0 11 15 17 17 10 輸出樣例: 3 4 6 8 作者:何知令 完成時間:2017年9月16日 */ #include <stdio.h> #include <stdlib.h> int main() { int i,j,m; int n; int num[100000]; int ans[100000]; int maxlen=0,len; while(~scanf("%d",&n)) { for(i=0; i<n; i++) scanf("%d",&num[i]); i=0; len=0; while(num[i]>=0&&num[i]<=9) { if(num[i+1]>num[i]) { len++; i++; continue; } else { if(maxlen<len) { maxlen=len; m=i; for(j=maxlen; j>=0; j--,m--) ans[j]=num[m]; len=0; } else len=0; } i++; } printf("%d",ans[0]); for(i=1; ans[i]!='\0'; i++) printf(" %d",ans[i]); printf("\n"); } return 0; }
知識點總結:..
學習心得:..