大數加法 + 斐波那契數列
阿新 • • 發佈:2019-01-02
Problem Description
度熊面前有一個全是由1構成的字串,被稱為全1序列。你可以合併任意相鄰的兩個1,從而形成一個新的序列。對於給定的一個全1序列,請計算根據以上方法,可以構成多少種不同的序列。Input
這裡包括多組測試資料,每組測試資料包含一個正整數N,代表全1序列的長度。
1≤N≤200
Output
對於每組測試資料,輸出一個整數,代表由題目中所給定的全1序列所能形成的新序列的數量。
Sample Input
1
3
5
Sample Output
1
3
8
本來我想以為這是一個求全排列的題目,使用隔板法每次進行分類討論,後來發現實現不了,最後算了算是個斐波那契,但是前200項的話數字太大,要用大數加法,現學的大數加法模擬,比過去用的簡單許多,試了一下到200數字的長度為43,陣列開50就夠了
#include<stdio.h> int num[201][51]; void previous_conduct() { num[0][0]=1; num[1][0]=1; num[2][0]=2; for(int i=3;i<=200;i++) { int carry=0; for(int j=0;j<=50;j++) { num[i][j]=(num[i-1][j]+num[i-2][j]+carry)%10; //每個地方都記得加上進位 carry=(num[i-1][j]+num[i-2][j]+carry)/10; } } } int main() { int n; previous_conduct(); while(scanf("%d",&n)!=EOF) { for(int i=50;i>=0;i--) { if(num[n][i]!=0) { for(int j=i;j>=0;j--) { printf("%d",num[n][j]); } printf("\n"); break; } } } return 0; }