# 读取输入:初始值 s,目标值 t,步长 a 和 b
s, t, a, b =map(int,input().split())defgetResult(s, t, a, b):"""
计算从 s 到 t 所需的最小 x,使得 (t - s - a * x) 或 (t - s + a * x) 是 b 的倍数。
"""
x =0# 初始化 x 为 0# 计算目标差值
diff = t - s
# 枚举 x,直到找到满足条件的 xwhile((diff - a * x)% b !=0and(diff + a * x)% b !=0):
x +=1# 增加 x 的值# 返回满足条件的 xreturn x
# 输出结果print(getResult(s, t, a, b))
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
java解法
解题思路
importjava.util.*;publicclassMain{publicstaticvoidmain(String[] args){// 获取输入int[] input =getInput();// 计算最少使用a的次数int result =computeMinAUsage(input[0], input[1], input[2], input[3]);// 输出结果printResult(result);}/**
* 获取输入
* @return 包含 s, t, a, b 的数组
*/privatestaticint[]getInput(){Scanner sc =newScanner(System.in);int[] arr =newint[4];for(int i =0; i <4; i++){
arr[i]= sc.nextInt();// 依次读取 s, t, a, b}return arr;}/**
* 计算最少使用 a 的次数
* @param s 初始值
* @param t 目标值
* @param a 每次步长 a 的值
* @param b 每次步长 b 的倍数
* @return 最少使用 a 的次数
*/privatestaticintcomputeMinAUsage(int s,int t,int a,int b){int cnt =0;// 初始化使用 a 的次数int dif = t - s;// 计算目标差值// 不断增加 cnt 的值,直到满足条件while(true){// 检查是否满足条件if((dif - a * cnt)% b ==0||(dif + a * cnt)% b ==0){returnMath.abs(cnt);// 返回绝对值,确保非负}
cnt++;// 尝试更大的 cnt}}/**
* 输出结果
* @param result 计算得到的结果
*/privatestaticvoidprintResult(int result){System.out.println(result);// 打印结果}}
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
评论记录:
回复评论: