入門訓練 Fibonacci數列 (陣列越界問題)
阿新 • • 發佈:2019-01-02
我的想法:建立一個數組直接表示Fn除以10007的餘數,所以a[1]=1; a[2]=1; a[n]就是所求餘數。
我的程式碼:
import java.util.Scanner; public class Main { public static void main(String args[]){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int a[] = new int[n+1]; a[1]=1; a[2]=1; for(int i=3;i<=n;i++) { a[i] = (a[i-1]+a[i-2]) % 10007; } System.out.println(a[n]); } }
顯示結果是
我百思不得其解,最後發現是在輸入n=1時報錯陣列越界
所以改變陣列下標,重新執行
import java.util.Scanner; public class Main { public static void main(String args[]){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int a[] = new int[n+1]; a[0]=1; a[1]=1; for(int i=2;i<n;i++) { a[i] = (a[i-1]+a[i-2]) % 10007; } System.out.println(a[n-1]); } }
顯示100,正確。
以後在運用到陣列時,一定要考慮到陣列越界問題,看是不是滿足所有的定義域都有解。