1. 程式人生 > >大數加法 + 斐波那契數列

大數加法 + 斐波那契數列

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;
}