藍橋杯-入門訓練 :Fibonacci數列
阿新 • • 發佈:2018-01-10
java next fibonacci print text 輸出 ati for ade
註意:藍橋杯編譯器java的類名必須為Main
代碼實現:
問題描述Fibonacci數列的遞推公式為:Fn=Fn-1+Fn-2,其中F1=F2=1。當n比較大時,Fn也非常大,現在我們想知道,Fn除以10007的余數是多少。
輸入格式 輸入包含一個整數n。 輸出格式 輸出一行,包含一個整數,表示Fn除以10007的余數。說明:在本題中,答案是要求Fn除以10007的余數,因此我們只要能算出這個余數即可,而不需要先計算出Fn的準確值,再將計算的結果除以10007取余數,直接計算余數往往比先算出原數再取余簡單。
樣例輸入 10 樣例輸出 55 樣例輸入 22 樣例輸出 7704 數據規模與約定 1 <= n <= 1,000,000。 錦囊1 使用數組來保存F序列,只保存除10007的余數。 錦囊2 先令F[1]=1, F[2]=1,然後用F[i]=(F[i-1]+F[i-2])%10007來計算F[i]。
import java.util.Scanner; public class Fibonacci { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int num = scanner.nextInt(); int nums[] = new int[num + 2]; nums[1] = nums[2] = 1; //其中F1=F2=1if (num == 1 || num == 2) { } else { for (int i = 3; i <= num; i++) { // System.out.println("i" + i); // System.out.println("nums[i-1]" + nums[i - 1]); // System.out.println("nums[i-2]" + nums[i - 2]); nums[i] = (nums[i - 1] + nums[i - 2]) % 10007; } } System.out.println(nums[num]); }/* 輸出結果:
10 i3 nums[i-1]1 nums[i-2]1 i4 nums[i-1]2 nums[i-2]1 i5 nums[i-1]3 nums[i-2]2 i6 nums[i-1]5 nums[i-2]3 i7 nums[i-1]8 nums[i-2]5 i8 nums[i-1]13 nums[i-2]8 i9 nums[i-1]21 nums[i-2]13 i10 nums[i-1]34 nums[i-2]21 55*/ }
由上面的輸出結果發現:nums[n]的值就等於nums[n-1]與nums[n-2]的和,也就是題中提到的:Fn=Fn-1+Fn-2,本代碼已經通過測試。
藍橋杯-入門訓練 :Fibonacci數列