文章

2

粉丝

133

获赞

1

访问

9.4k

头像
求解:为什么这样做不行呢?
P1413 华中科技大学/中国矿业大学机试题
发布于2022年3月10日 18:30
阅读数 4.6k

1.关于正确题解

看了正确题解,使用了动态规划算法,走到第n阶时可以是从第n-1阶走一步到达或者从第n-2阶走两步到达,恰好问题可以用斐波那契数列解决。

2.我的题解

我用的方法比较笨,就针对一个数N直接计算的,使用组合数进行计算。

算法思路:

  1. 计算N阶上楼最多上2步的数量count2=N/2;
  2. 从i=0~count2开始遍历,使用组合数C(N-i,i)计算使用i次2步的上楼情况数量,累加得到sum,即为总的上楼情况数。

代码:

#include<stdio.h>

//计算组合数
long long C(int a,int b){
    int i;
    long long res=1;
    if(b>a/2)
        b=a-b;
    for(i=0;i<b;i++){
        res*=a-i;
        res/=i+1;
    }
    return res;
}

int main(){
    int i,N,count2;
    long long sum;
    while(scanf("%d",&N)!=EOF){
        count2=N/2;
        sum=1;

        for(i=1;i<=count2;i++){
            sum+=C(N-i,i);
        }

        printf("%lld\n&quo...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发