题目描述
- 小明在玩一个数字加减游戏,只使用加法或者减法,将一个数字变成数字
- 每个回台,小明可以用当前的数字加上或减去一个数字
- 现在有两种数字可以用来加减,分别为
- 其中数字没有使用次数限制
- 请问小明最少可以用多少次,才能将数字变成数字
- 题目保证数字一定能变成数字
输入描述
- 输入的唯一一行包含四个正整数并且
输出描述
- 输出的唯一一行包含一个整数,表示最少需要使用多少次才能将数字变成数字
用例
用例1
--输入
1 10 5 2
--输出
1
--说明
初始值 1 加上一次 a 变成 6,然后加上两次 b 变成 10,因此 a 的使用次数为 1
用例2
--输入
11 33 4 10
--输出
2
--说明
11 减两次 a 变成 3,然后加三次 b 变成 33,因此 a 的使用次数是 2 次
code + analysis
package com.hw;
import java.util.Scanner;
/**
* desc : <a href="https://fcqian.blog.csdn.net/article/details/128385337">数字加减游戏</a>
* <p>
* create time : 2023/7/24 10:20
*/
public class NumMaster {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int s = in.nextInt();
int t = in.nextInt();
int a = in.nextInt();
int b = in.nextInt();
numMaster(s, t, a, b);
}
/* 目标:将数字 s 变成 数字 t
* 提供数字 a b 可以来加减
* 数字 b 没有使用次数限制
* 求 最少用多少次数字 a,可以将数字 s 变成数字 t
*
* ex: s = 1, t = 10, a = 5, b = 2
* s = 11, t = 33, a = 4, b = 10
*
* 那么可以这样考虑:假设不使用 a 的话,可不可以将 s 变成 t 呢?
* |- 首先可以得到 abs(s - t) 其是否可以 整除 数字 b
* 使用一个数字 a,那么得到的差值 abs(s - t) - a 是否可以整除数字 b
* 这里有一个变化,实际上应该是 加上/减去 若干个a,判断其是否可以整除数字 b
*/
private static void numMaster(int s, int t, int a, int b) {
// s t 的差值
int diff = Math.abs(s - t);
// 判断最多需要几个 a 可以满足条件
int needA = (diff + a) / a;
for (int i = 0; i < needA; i++) {
// 加上若干个 a 或 减少若干个 a
int add = (diff + i * a) % b;
int up = Math.abs(diff - i * a) % b;
if (add == 0 || up == 0) {
System.out.println(i);
break;
}
}
}
}
标签:10,数字,nextInt,int,加减,--,变成,游戏
From: https://blog.51cto.com/u_16079703/6845422