首页 > 试题广场 >

访友

[编程题]访友
  • 热度指数:9247 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小易准备去拜访他的朋友,他的家在0点,但是他的朋友的家在x点(x > 0),均在一条坐标轴上。小易每一次可以向前走1,2,3,4或者5步。问小易最少走多少次可以到达他的朋友的家。

输入描述:
一行包含一个数字x(1 <= x <= 1000000),代表朋友家的位置。


输出描述:
一个整数,最少的步数。
示例1

输入

4

输出

1
示例2

输入

10

输出

2
以为要用动态规划,无语
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();
    }
}


发表于 2020-05-08 16:37:01 回复(0)
//可以理解为动态规划的题
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]);
    }
}
一看到跳台阶,就想用动态😂
发表于 2020-05-03 17:37:43 回复(0)
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%
发表于 2020-03-01 12:02:58 回复(1)

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);
    }
}
编辑于 2019-09-19 21:23:56 回复(0)
Java动态规划
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));
    }
}


发表于 2019-09-10 15:18:52 回复(0)
Java解答:若x除5后有余数则+1.
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);
    }
}

发表于 2019-08-02 20:11:25 回复(0)