C++程序算法题----上台阶2

题目:

小瓜想走上一个一共有n级的台阶,由于小瓜的腿长比较特殊,他一次只能向上走1级或者3级或者5级台阶。小瓜想知道他有多少种方法走上这n级台阶,你能帮帮他吗?

Input

一行一个整数n(n<=100000),表示一共有n级台阶。

Output

一行一个整数,表示小瓜上台阶的方案数对100003取余的结果。

Sample Input

3

Sample Output

思路:

运用动态规划的思想,假如一共有n阶台阶,因为只能走1、3、5级,那么到达第n阶台阶就有三种情况,即当到达(n-1)时走1阶,到达(n-3)时走3阶,到达(n-5)时走5阶,依此类推,要求是前提是n>5.如果n<5,那么在可接受范围内,计算作为初始值。当然还有最重要一步的就是对每个求得得数求余,避免数据过大溢出。

#include<iostream>
using namespace std;
long step[1000003] = {0};
int main(){
    int N;
    cin>>N;
    if(N<=0){
        return 0;
    }
    step[0] = 1;
    step[1] = 1;
    step[2] = 2;
    step[3] = 3;
    step[4] = 5;
    if(N<=5){
        cout<<step[N-1]<<endl;
        return 0;
    }
    for(int i=5;i<N;i++){
        step[i]= (step[i-1]+step[i-3]+step[i-5])%100003;
    }
    cout<<step[N-1]<<endl;
}

运行结果:


posted @ 2020-09-17 09:16  littlemelon  阅读(1244)  评论(0编辑  收藏  举报