題目描述:
N階樓梯上樓問題:一次可以走兩階或一階,問有多少種上樓方式。
輸入:
輸入包括一個整數N。
輸出:
可能有多組測試數據,對於每組數據,
輸出當樓梯階數是N時的上樓方式個數。
樣例輸入:
4
樣例輸出:
5
思路一:設有x次走一階,y次走兩階,則一定滿足x+2*y=n,且x、y均爲整數,那麼對於任何一個滿足的x的可能走法共有
C(x+(n-x)/2,x)種走法,即從數x+(n-x)/2中取x種組合,值爲(x+(n-x)/2)的階乘除以x的階乘與(n-x)/2的階乘的乘積。
依次取可能的x值,然後相加每一種的可能情況就可以了。
思路二:走到第n階時可能是從第n-1階走一步到的,也可能是從n-2階走兩階到的,設F(n)爲走到n階的種數,則F(n)=F(n-1)+F(n-2)。當n=1時,F(1)=1,n=2時,F(2)=2,這是一個動態規劃問題。其實就是一個斐波那契數列。
public class CrawFloor {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Please input number of the floor:");
int num = scan.nextInt();
System.out.println("一共有" + fic(num) + "種走法!");
scan.close();
}
public static int fic(int n){
if(n == 1 || n == 2){
return n;
}else if(n > 2){
return fic(n - 1) + fic(n - 2);
}else{
return -1; //輸入n非法
}
}
}