博文视点有奖答题第二题:青蛙跳台阶问题


博文视点有奖答题第二题:青蛙跳台阶问题

(1)一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。(2)一只青蛙一次可以跳上1级台阶,也可以跳上2 级……它也可以跳上n 级,此时该青蛙跳上一个n级的台阶总共有多少种跳法?

#include <stdio.h> #include <stdlib.h> int main(int ac, int* av[]){ int num_steps, result; printf("Please input the num of steps\n"); scanf("%d", &num_steps); result = 0; result += cal_steps(num_steps); printf("There are %d ways for the frog to pass %d steps.\n", result, num_steps); } int cal_steps(int n){ int i, j, *a; a = (int*)malloc(n * sizeof(int)); a[0] = 1; a[1] = 2; for(i=2; i<n; i++){ for(j=0; j<i; j++) a[i] += a[j]; a[i] += 1; } return a[n-1]; } int cal_steps_two(int n){ int i, pre, result, tmp; if(n == 1) return 1; if(n == 2) return 2; if(n > 2){ pre = 1; result = 2; for(i=2; i<n; i++){ tmp = result; result = result + pre; pre = tmp; } } return result; } int cal_steps_recursive(int n){ int steps; steps = 0; if((n == 0) || (n < 0)){ return 0; } if(n == 1) return 1; if(n == 2) return 2; if(n > 2){ steps += cal_steps(n-1) + cal_steps(n-2); } return steps; }




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值