小易准备去拜访他的朋友,他的家在0点,但是他的朋友的家在x点(x > 0),均在一条坐标轴上。小易每一次可以向前走1,2,3,4或者5步。问小易最少走多少次可以到达他的朋友的家。
import java.util.Scanner; /** * @Author: coderjjp * @Date: 2020-05-08 16:24 * @Description: * @version: 1.0 */ public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println((int)Math.ceil(sc.nextInt()/5.0)); sc.close(); } }
import java.util.Scanner; /** * @Author: coderjjp * @Date: 2020-05-08 16:24 * @Description: * @version: 1.0 */ public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int x = sc.nextInt(); int dp[] = new int[x+1]; for (int i = 1; i <= x; i++){ dp[i] = dp[i-1]; if (i >= 2) dp[i] = Math.min(dp[i], dp[i-2]); if (i >= 3) dp[i] = Math.min(dp[i], dp[i-3]); if (i >= 4) dp[i] = Math.min(dp[i], dp[i-4]); if (i >= 5) dp[i] = Math.min(dp[i], dp[i-5]); dp[i]++; } System.out.println(dp[x]); sc.close(); } }
//可以理解为动态规划的题 import java.io.*; public class Main{ public static void main(String[] args)throws IOException{ BufferedReader br = new BufferedReader( new InputStreamReader( System.in )); int n = Integer.parseInt(br.readLine()); if(n<=5){ System.out.println(1); return; } int[] dp = new int[n+1]; for(int i = 0;i<=5;i++) dp[i] =1; // for(int i = 6;i<=n;i++){ int min = Integer.MAX_VALUE; for(int j = i-1;j>i-5-1;j--){ min = Math.min(dp[j],min); } dp[i] = 1+min; } System.out.println(dp[n]); } }一看到跳台阶,就想用动态😂
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String x = scanner.nextLine(); int road = Integer.parseInt(x); System.out.println(findRoad(road)); } static int count = 0; private static int findRoad(int road) { if (road >= 5) { count++; return findRoad(road - 5); } else if (road >= 4) { count++; return findRoad(road - 4); } else if (road >= 3) { count++; return findRoad(road - 3); } else if (road >= 2) { count++; return findRoad(road - 2); } else if (road >= 1) { count++; return findRoad(road - 1); } return count; } }这代码case通过率为20.00%
1.若小于5就为1
2.若大于5 看他有没有余数
有余数就x/5+1
没有余数就x/5
import java.util.*; public class Main{ public static void main(String args[]){ Scanner sc=new Scanner(System.in); int A1=sc.nextInt(); int s; if(A1<=5){ s=1; }else{ if(A1%5>0){ s=(A1/5)+1; }else{ s=(A1/5); } } System.out.println(s); } }
别人更精简的答案
import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner input = new Scanner(System.in); int x = input.nextInt(); int m = x/5; if (x%5 != 0) m++; System.out.println(m); } }
import java.util.*; public class Main { private static int walk(int n) { //动态规划法,和换零钱相似 // 状态转移方程: dp[i] = min{dp[i], dp[i - walks[j]] + 1},walks[j] <= i int[] dp = new int[n + 1]; Arrays.fill(dp, Integer.MAX_VALUE - 5); for (int i = 1; i <= n && i <= 5; i++) { dp[i] = 1; } //填充dp for (int i = 6; i <= n; i++) { for (int j = 1; j <= 5; j++) { if (i >= j) { dp[i] = Math.min(dp[i], dp[i - j] + 1); } } } return dp[n]; } public static void main(String[] args) { Scanner input = new Scanner(System.in); String param = input.nextLine(); int n = Integer.parseInt(param); System.out.println(walk(n)); } }