问题:
一只青蛙跳台阶,一次可以跳一阶或两阶,请问跳到n阶有几种跳法?
分析:
一阶有1种跳法,二阶有2种跳法,这两种可以固定,当第三阶后青蛙第一跳有两种选择
- 如果跳一阶,就还剩二阶,因为二阶的跳法已知则可以利用,所以三阶跳法为1+2=3
- 如果跳二阶,还剩一阶,因为二阶的跳法已知可以利用,所以三阶跳法为3
利用这种规律我们就可归纳出该跳法为:1 2 3 5 8 ....(该项为前两项之和)
就可将其转化为斐波那契数问题,则问题解决。
代码实现
java实现
import java.util.Scanner;
public class Frog {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] ways = new int[n];
ways[0] = 1;//一阶跳法
ways[1] = 2;//二阶跳法
for (int i = 2; i < n; i++) {
ways[i] = ways[i - 1] + ways[i - 2];
if(i == n-1) {
System.out.println((i + 1) + "阶有" + ways[i] + "种跳法");
}
}
}
}
c实现
#include <stdio.h>
int Frog(int n){
int a = 1;//一阶跳法
int b = 2;//二阶跳法
int c = 0;
if(n == 1){
return 1;
} else if(n == 2) {
return 2;
} else {
while(n > 2){ // 1 2 3 5 8...前两位之和等于该位
c = a + b;
a = b;
b = c;
n--;
}
}
}
int main(){
int n = 0;
scanf("%d", &n);
int ways = Frog(n);
printf("%d阶有%d种跳法 ", n, ways);
return 0;
}