1. 程式人生 > >Fibonacci數列以及藍橋杯Fibonacci數列%10007

Fibonacci數列以及藍橋杯Fibonacci數列%10007

斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波納契數列以如下被以遞迴的方法定義:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)。

解法1:(尾遞迴)

#include<stdio.h>


int fib(int n);


int main()
{
int n;
scanf("%d",&n);
printf("%d\n",fib(n));

return 0;
 } 
 
 int fib(int n)
 {
 if(n<=2)
 return 1;
 else
 return fib(n-2)+fib(n-1);
 }
解法二:
#include<stdio.h>

int main()
{
	int n;
	int f0=1,f1=1,currentNumber=0;
	scanf("%d",&n);
	if(n<=2)
		currentNumber = 1;
	else
		{
			for(int i=2;i<n;i++)
			{
				currentNumber = f0+f1;
				f0=f1;
				f1=currentNumber;
			}
		}
	printf("%d\n",currentNumber);
	
	return 0;
}
藍橋杯入門題目: 問題描述

給定一個長度為n的數列,將這個數列按從小到大的順序排列。1<=n<=200

輸入格式

第一行為一個整數n。 
第二行包含n個整數,為待排序的數,每個整數的絕對值小於10000。

輸出格式

輸出一行,按從小到大的順序輸出排序後的數列。

樣例輸入 5 
8 3 6 4 9 樣例輸出 3 4 6 8 9 我給出的參考程式碼:
#include<stdio.h>

int main()
{
	int n;
	int f0=1,f1=1,currentNumber=0;
	scanf("%d",&n);
	if(n<=2)
		currentNumber = 1;
	else
		{
			for(int i=2;i<n;i++)
			{
				currentNumber = (f0+f1)%10007;
				f0=f1;
				f1=currentNumber;
			}
		}
	printf("%d\n",currentNumber);
	
	return 0;
}

思想:只要求得出餘數,分佈求餘。