【9301】走楼梯

Time Limit: 10 second
Memory Limit: 2 MB

问题描述
楼梯有n级台阶,上楼可以一步上一个台阶,也可以一步上两个台阶。编写一递归程序计算共有多少种不同的走法?

Input

输入台阶数n

Output

输出走法总数

Sample Input

3

Sample Output

3

【题解】

可以先想想简单的情况,到达第一级阶梯,只有一种方法,就是从地面到第一级。然后是第二级阶梯,可以从地面直接上两级 直接到第二级,也可以从地面到第一级然后到第二级。

所以a[1] = 1,a[2] = 2;则第三层可以从第1层上两层到,也可以从第二层直接上一层就到。所以a[3] = a[1] + a[2];以此类推。

可以得出递推公式a[i] = a[i-1] + a[i-2];

【代码】

#include <cstdio>
#include <stdlib.h>

int n,a,b,c;

void input_data() //输入n
{
    scanf("%d",&n);
    a = 1;
    b = 2;
}

void get_ans()
{
    if (n == 1) //首先要対n == 2和 n==1 的情况进行特判。
        {
            printf("%d\n",a);
            exit(0);
        }
    if (n == 2)
        {
            printf("%d",b);
            exit(0);
        }
    for (int i = 3;i <= n;i++) //大于等于3的情况则要递推,用a,b,c三个变量循环使用
        {
            c = a + b;
            a = b; b = c;
        }
    printf("%d",c); //最后输出c
}

int main()
{
    input_data();
    get_ans();
    return 0;
}


posted @ 2017-10-06 19:23  AWCXV  阅读(210)  评论(0编辑  收藏  举报