小玖


私信TA

用户名:huang214

访问量:1004

签 名:

撒狗粮的真恶心

等  级
排  名 2822
经  验 2138
参赛次数 0
文章发表 14
年  龄 0
在职情况 学生
学  校 贺州学院
专  业 通信工程

  自我简介:

解题思路:这道题只要找对方法就好解。

首先题目要求跳上一阶 可以 跳一步和两步,要你求跳上n阶的总方法数。首先我们以n阶来看,跳上n阶,我们可以从n-1阶跳一步上来或者可以 从n-2阶跳上来。可以知道他们 的关系为n=(n-1)+(n-2);看不懂 我们以几个简单的例子来看,先来分析一些底层的数据,因为 涉及(n-1)和(n-2),我们得考虑0阶和1阶,我们跳0阶有多少方法可想而知 0种,而一阶就有1种,那2阶就只能从 1阶跳一步上来(1-2),带入关系式也正确,3阶可以从1阶和2阶跳上来(1-2-3,1-3)有两种情况,4阶可以从2阶和3阶跳上来(跳上每一阶只有两种方法),因为要求总的方法(从1阶跳n阶)那就要 分析2阶和3阶的方法 ,因为只能从2阶和3阶跳上来,所以把跳上 2阶 和3阶的方法 加起来就行(1-2-3-4,1-3-4,1-2-4)。........剩下的就不推了。

注意事项:记得五星好评

参考代码:

#include<bits/stdc++.h>

using namespace std;

//这是递归的方法

//int di(int n){

// if(n==0)//第零级超出范围 

// return 0;

// if(n==1)

// return 1;//跳上第一阶只有一种跳法

// return di(n-1)+di(n-2);//例如跳第3阶你可以从第2阶或者第1阶跳上来只有两种跳法

//}

//用递归不能过会超时,只有一组数据时可以用一下

int a[100000];//用数组保存每一阶的方法 就不用每次重新求一次,防止超时

int main(){

int n;

cin>>n;

a[1]=1;

a[0]=0;

for(int i=2;i<=40;i++){//直接求完

a[i]=a[i-1]+a[i-2];

}

while(n--){

int b;

cin>>b;

cout<<a[b]<<endl;;

}

return  0;

}


 

0.0分

1 人评分

  评论区

  • «
  • »