1. 程式人生 > >藍橋杯-入門訓練 :Fibonacci數列

藍橋杯-入門訓練 :Fibonacci數列

java next fibonacci print text 輸出 ati for ade

  問題描述

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]。
註意:藍橋杯編譯器java的類名必須為Main 代碼實現:
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=1

        
if (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數列