小明在玩一个数字加减游戏,只使用加法或者减法,将一个数字 s 变成数字 t。每个回合,小明可以用当前的数字加上或减去一个数字。现在有两种数字可以用来加减,分别为 a 和 b(a=b),其中 b 没有使用次数限制。请问小明最少可以用多少次 a,才能将数字 s 变成数字 t。题目保证数字 s 一定能变成数字 t。
为了将数字 s 变成数字 t,需要通过加或减 a 和 b 来达到目标。题目要求最小化使用 a 的次数,而 b 的使用次数没有限制。
设定差值 D=t−s。我们的目标是找到最小的非负整数 x,使得存在整数 y 满足:
y⋅b=D±x⋅a即通过加或减 x 次 a,使得剩余的差值可以被 b 整除。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
// 输入变量
ll start, target, a, b;
cin >> start >> target >> a >> b;
// 计算差值
ll diff = target - start;
// 初始化a的使用次数
ll a_count = 0;
while (true) {
// 检查 diff - a * a_count 是否能被 b 整除
if ((diff - a * a_count) % b == 0) {
cout << a_count;
return 0;
}
// 检查 diff + a * a_count 是否能被 b 整除
if ((diff + a * a_count) % b == 0) {
cout << a_count;
return 0;
}
a_count++;
}
return 0;
}
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
// 读取输入
long start = sc.nextLong();
long target = sc.nextLong();
long a = sc.nextLong();
long b = sc.nextLong();
sc.close();
// 计算差值
long diff = target - start;
// 初始化a的使用次数
long aCount = 0;
while (true) {
// 检查 diff - a * aCount 是否能被 b 整除
if ((diff - a * aCount) % b == 0) {
System.out.println(aCount);
return;
}
// 检查 diff + a * aCount 是否能被 b 整除
if ((diff + a * aCount) % b == 0) {
System.out.println(aCount);
return;
}
aCount++;
}
}
}
def main():
import sys
s, t, a, b = map(int, sys.stdin.read().split())
diff = t - s
a_count = 0
while True:
# 检查 diff - a * a_count 是否能被 b 整除
if (diff - a * a_count) % b == 0:
print(a_count)
return
# 检查 diff + a * a_count 是否能被 b 整除
if (diff + a * a_count) % b == 0:
print(a_count)
return
a_count += 1
if __name__ == "__main__":
main()
小明在玩一个数字加减游戏,只使用加法或者减法,将一个数字 s 变成数字 t 。
每个回合,小明可以用当前的数字加上或减去一个数字。
现在有两种数字可以用来加减,分别为a,b(a!=b),其中 b 没有使用次数限制。
请问小明最少可以用多少次 a ,才能将数字 s 变成数字 t 。
题目保证数字 s 一定能变成数字 t 。
输入的唯一一行包含四个正整数 s,t,a,b(1<=s,t,a,b<=105),并且 a!=b 。
输出的唯一一行包含一个整数,表示最少需要使用多少次 a 才能将数字 s 变成数字 t 。
输入
1 10 5 2
输出
1
说明
初始值 1 加一次 a 变成 6 ,然后加两次 b 变成 10 ,因此 a 的使用次数为 1
输入
11 33 4 10
输出
2
说明
11 减两次 a 变成 3 ,然后加三次 b 变成 33 ,因此 a 的使用次数为 2 次