有n阶台阶,一个人一次只能跳一下或者跳两下,其中某一阶台阶坏掉,不能跳到这个坏台阶,问一共有多少种跳法。
#include <stdio.h>
int function(int n, int k)
{
if(k > n)
return 0;
if(n==1)
return 1;
if(n==2)
return 2;
int f1 = 1;
int f2 = 2;
int f;
for(int i=3;i<=n;i++)
{
if(i == k) //遇到坏楼梯直接跳过
{
continue;
}
else if(i == k+1) //到k+1阶楼梯只能通过k-1阶楼梯走两步,所以k+1阶楼梯走法等于k-1阶楼梯走法
{
f = f2;
f1 = f2;
continue;
}
else if(i == k+2) //到k+2阶楼梯只能通过k+1阶楼梯走一步,所以k+2阶楼梯走法等于k+1阶楼梯走法
{
f = f2;
continue;
}
f = f1 + f2;
f1 = f2;
f2 = f;
}
return f;
}
int main()
{
int n,k;
printf("请输入楼梯个数:");
scanf("%d",&n);
printf("请输入第几阶楼梯坏掉:");
scanf("%d",&k);
int sum = function(n,k);
printf("共有%d种走法!\n",sum);
return 0;
}