[Luogu] P2260 [清華集訓2012]模積和
阿新 • • 發佈:2020-11-12
題目描述
樓梯有N 階,上樓可以一步上一階,也可以一步上二階。
編一個程式,計算共有多少種不同的走法。
輸入格式
一個數字,樓梯數。
輸出格式
輸出走的方式總數。
輸入輸出樣例
輸入
4
輸出
5
說明/提示
- 對於 60%的資料 N<=50
- 對於 100%的資料 N<=5000
題目分析
對於N = 1,和N = 0的時候,我們可以明顯的得到 f(0) = 0,f(1) = 1,也就是樓梯層數為1和0只有一種方式
而對於更多的樓梯階數,要麼一次走一格,要麼一次走兩格,那我每次的走法就等於=上一格的方案數+上上格的方案數咯,這就推出了方程:
這就是著名的斐波那契數列的一個例子,但是想到這一步你只能拿到60分,我們還要考慮到int 和long型別可能會越界導致程式碼提交不通過
這裡呢我寫的是java版的程式碼,java自帶大數運算,所以可以偷一波懶了,其他語言的可能就要解決大整數的問題了
程式碼
public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); if(n==0) { System.out.print(0);return; } if(n==1) { System.out.print(1);return; } BigInteger a=BigInteger.ONE,b=BigInteger.ONE,c=BigInteger.ZERO; for(int i=2;i<=n;++i) { c=a.add(b); a=b; b=c; } System.out.print(c); } }