蓝桥杯第五届省赛JAVA真题----n级台阶
有n級臺階。從地面(第0級)出發,首先連續的上臺階,上到不超過第n級的某一個位置后再連續的下臺階,直到回到地面。若每次上下臺階只允許走1級或2級,請問可能的上下臺階的方案數是多少?
特別地,在0級站著不動也算一種方案。
數據格式:
輸入一行包含兩個正整數n和m。
輸出一個整數,表示n級臺階有多少種合法的走樓梯方案,答案對m取余。
例如:輸入:
2 10007
程序應該輸出
6
【樣例說明1】
共有6種方案(其中+表示上臺階,-表示下臺階):
(1) 原地不動
(2) +1 -1
(3) +2 -2
(4) +2 -1 -1
(5) +1 +1 -2
(6) +1 +1 -1 -1
再例如,輸入:
3 14
程序應該輸出:
1
【樣例說明2】
共有15種方案,對14取余后得1。
【數據規模】
對于30%的數據,n<=10000;
對于100%的數據,n<=10^17,m<=2*10^9。
資源約定:
峰值內存消耗(含虛擬機) < 256M
CPU消耗 < 1000ms
請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入…” 的多余內容。
所有代碼放在同一個源文件中,調試通過后,拷貝提交該源碼。
注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。
注意:主類的名字必須是:Main,否則按無效代碼處理。
解析:這個題目不要被上樓梯、下樓梯搞迷糊了,我們只需要計算出每次走1步或2步,走n級臺階有幾種可能性就可以了。至于下樓梯的情況平方以下就可以了。
import java.util.Scanner;public class Main {static int cnt = 0;public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int sum=0;for(int i=0;i<=n;i++){f(i, 0);sum += cnt*cnt;cnt = 0;}System.out.println(sum%m);}private static void f(int n, int i) {// TODO Auto-generated method stubif (i > n) {return;}if (i == n) {cnt += 1;}f(n, i + 1);f(n, i + 2);} }當然,大神的代碼一般都是這樣的,如果看不太懂就看上面的方法吧。
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int sum=1;for(int i=0;i<=n;i++){sum+=i*i;}System.out.println(sum%m);} }總結
以上是生活随笔為你收集整理的蓝桥杯第五届省赛JAVA真题----n级台阶的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu触电(转)
- 下一篇: (转)asp.net2.0 上传大容量文