69,368
社区成员
发帖
与我相关
我的任务
分享
// 某人攀登天梯,有时一步上1级,有时一步上2级,高兴了还一步跨上3级。
// 现在求登上n级阶梯,共有多少种不同的走法?
// 1级阶梯,只有1种走法。
// 2级阶梯,2种走法,可以每步上1级,也可以一步上2级。
// 3级阶梯有4种走法。可以每步上1级;可以先上1级再一步上2级;可以先一步上2级再上1级;可以一步上3级。
// 4级阶梯共7种走法。可以先上1级,在第1级基础上再向上走3级,有4种走法;可以先一步上2级,在第2级基础上再向上走2级,有2种走法;可以先一步上3级,在第3级基础上再向上走1级,有1种走法。
// ……
// n级阶梯共有m种走法。因为可以先上n-3级,在第n-3级基础上再向上一步走3级;可以先上n-2级,在第n-2级基础上再向上一步走2级;可以先上n-1级,在第n-1级基础上再向上一步走1级。
//
// 输入样例: 输入:4 输出:7
//
// 输入:10 输出274
#include <iostream>
long long num[73];
int main(){
int i, n;
for (num[0] = num[1] = 1, num[2] = 2, i = 3; i < 73; ++i)
num[i] = num[i-1] + num[i-2] + num[i-3];
while(std::cin >> n) std::cout<<num[n]<<std::endl;
return 0;
}
#include <stdio.h>
/*参数1表示有几步一阶*/
/*参数2表示有几步二阶*/
/*函数返回总共有几种情况*/
int getSumWay(int oneStepNum, int twoStepNum)
{
if(twoStepNum ==0 || oneStepNum==0)
return 1;
int result = 0;
for(int i=0; i<twoStepNum;i++)
result += (oneStepNum+1 - i);
return result;
}
/*参数ladderNum表示总共几阶*/
/*函数遍历所有一阶二阶的情况*/
void inputLadderNum(int ladderNum)
{
int sumWay = 0;
int oneStepNum = ladderNum;
int twoStepNum=0;
while(twoStepNum*2 <= ladderNum)
{
sumWay +=getSumWay(oneStepNum,twoStepNum);
oneStepNum-=2;
twoStepNum+=1;
}
printf("共有%d 种方法\n",sumWay);
}
int main()
{
inputLadderNum(10);
}
稍微动手写了下。
应该算是穷举法吧。
getSumWay的实现不确定有没误