假设你正在玩跳格子(所有格子排成一个纵列)游戏。需要 跳完n 个格子你才能抵达终点。
每次你可以跳 1 或 2 个格子。你有多少种不同的方法可以到达终点呢?
注意:给定 n 是一个正整数。
import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); BigInteger count = new BigInteger("0"); for (int i = n & 1; i <= n; i += 2) { int t = i + (n - i) / 2; count = count.add(factorial(i + 1, t).divide(factorial(1, t - i))); } System.out.println(count); } private static BigInteger factorial(int start, int end) { BigInteger res = new BigInteger("1"); for (int i = start; i <= end; i++) { res = res.multiply(new BigInteger("" + i)); } return res; } }
/* 动态规划:dp[i]表示跳上i格的所有方法数 其中dp[i] = dp[i-1]+dp[i-2]; */ import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner input = new Scanner(System.in); int n = input.nextInt(); int[] dp = new int[n+1]; dp[0] = 1;dp[1] = 1; for(int i =2;i<=n;i++){ dp[i] = dp[i-1]+dp[i-2]; } System.out.println(dp[n]); } }
import java.util.Scanner; //跳格子,一步或两部 //44 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] di = new int[n+1]; di[1] = 1; di[2] = 2; for(int i=3;i<n+1;i++){ di[i] = di[i-1]+di[i-2]; } System.out.println(di[n]); } }
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); System.out.println(ladder(a)); } public static int ladder(int n) { if (n == 1) { return 1; } else if (n == 2) { return 2; } else { return ladder(n - 2) + ladder(n - 1); } } }