import java.util.Scanner; /** * 斐波那契數列的和 * @author fish shadow * 輸入兩個正整數k1,k2(保證k1<=k2)。輸出斐波那契數列的第k1項到第k2項的和。 * 測試案例: * 輸入: * 3 6 *輸出: *18 *(解釋2+3+5+8 ...
import java.util.Scanner; /**
* 斐波那契數列的和
* @author fish shadow
* 輸入兩個正整數k1,k2(保證k1<=k2)。輸出斐波那契數列的第k1項到第k2項的和。
* 測試案例:
* 輸入:
* 3 6
*輸出:
*18
*(解釋2+3+5+8=18)
*
*原來代碼中方法中參數類型為int,一次輸入兩個數,我用了String數組,然後又將String轉換成int類型 *註意:未進行k1<=k2的判斷 *參考代碼:https://blog.csdn.net/brycegao321/article/details/79849830
*String轉int參考: https://zhidao.baidu.com/question/38519769.html
*
*/
public class Test_1_2 {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
String str1 =sc.nextLine();
String[] all=str1.split(" ");//用字元串數組來接受輸入的多個數據,分隔符使用空格
String n1=all[0];
String n2=all[1];
try {
int a = Integer.parseInt(n1);
int b = Integer.parseInt(n2);
int result = fabonacciSum(a,b);
System.out.println(result);
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
private static int fabonacciSum(int i, int j) {
if (i > j || i < 0 || j < 0) {
return -1;
}
if (j < 2) {
return j;
}
int[] array = new int[j+1];
int total;
if (i < 2) { //下麵的for迴圈是從下標2開始的
total = 1;
} else {
total = 0;
}
array[0] = 0;
array[1] = 1;
for (int k = 2; k <= j; k++) {
array[k] = array[k-1] + array[k-2];
if (k >= i) {
total += array[k];
}
}
return total; }
}