有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
这题只要理解好提的深层意思,就很容易解决,不要被它的上上下下所迷惑,只需解决上n阶楼梯一次可以迈一步或两步有多少方法,然后0—n阶迈法平方的和就是方法,代码如下:
static int count=0;
public static void fun(int n,int i)
{
if(i>n)
{
return;
}
if(i==n)
{
count+=1;
}
fun(n,i+1);
fun(n,i+2);
}
public static void main(String[] args)
{
Scanner s=new Scanner(System.in);
int number=0;
int n=s.nextInt();
int m=s.nextInt();
for(int i=0;i<=n;i++)
{
fun(i,0);
number+=count*count;
count=0; //count重新为0,再次遍历
}
System.out.println(number%m);
}
结果:
如果觉得能有更多的改进,欢迎留言,谢谢大家!