首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

【华为OD-E卷 - 98 数字加减游戏 100分(python、java、c++、js、c)】

  • 25-03-07 19:41
  • 2782
  • 11675
blog.csdn.net

【华为OD-E卷 - 数字加减游戏 100分(python、java、c++、js、c)】

题目

小明在玩一个数字加减游戏,只使用加法或者减法,将一个数字s变成数字t。
每个回合,小明可以用当前的数字加上或减去一个数字。
现在有两种数字可以用来加减,分别为a,b(a!=b),其中b没有使用次数限制。
请问小明最少可以用多少次a,才能将数字s变成数字t。
题目保证数字s一定能变成数字t。

输入描述

  • 输入的唯一一行包含四个正整数s,t,a,b(1<=s,t,a,b<=10^5),并且a!=b

输出描述

  • 输出的唯一一行包含一个整数,表示最少需要使用多少次a才能将数字s变成数字t

用例

用例一:
输入:
1 10 5 2
  • 1
输出:
1
  • 1
用例二:
输入:
11 33 4 10
  • 1
输出:
2
  • 1

python解法

  • 解题思路:
  • 在这里插入图片描述
# 读取输入:初始值 s,目标值 t,步长 a 和 b
s, t, a, b = map(int, input().split())

def getResult(s, t, a, b):
    """
    计算从 s 到 t 所需的最小 x,使得 (t - s - a * x) 或 (t - s + a * x) 是 b 的倍数。
    """
    x = 0  # 初始化 x 为 0
    # 计算目标差值
    diff = t - s

    # 枚举 x,直到找到满足条件的 x
    while ((diff - a * x) % b != 0 and (diff + a * x) % b != 0):
        x += 1  # 增加 x 的值

    # 返回满足条件的 x
    return x

# 输出结果
print(getResult(s, t, a, b))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

java解法

  • 解题思路
  • 在这里插入图片描述
import java.util.*;

public class Main {
    public static void main(String[] args) {
        // 获取输入
        int[] input = getInput();
        // 计算最少使用a的次数
        int result = computeMinAUsage(input[0], input[1], input[2], input[3]);
        // 输出结果
        printResult(result);
    }

    /**
     * 获取输入
     * @return 包含 s, t, a, b 的数组
     */
    private static int[] getInput() {
        Scanner sc = new Scanner(System.in);
        int[] arr = new int[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 的次数
     */
    private static int computeMinAUsage(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) {
                return Math.abs(cnt);  // 返回绝对值,确保非负
            }
            cnt++;  // 尝试更大的 cnt
        }
    }

    /**
     * 输出结果
     * @param result 计算得到的结果
     */
    private static void printResult(int result) {
        System.out.println(result);  // 打印结果
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56

C++解法

  • 解题思路
更新中
  • 1

C解法

  • 解题思路

更新中
  • 1

JS解法

  • 解题思路

  • 在这里插入图片描述

const readline = require("readline");

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
});

// 监听输入行,处理逻辑
rl.on("line", (line) => {
    // 解析输入的 s, t, a, b
    const [s, t, a, b] = line.split(" ").map(Number);

    // 调用函数计算最小的 x 值并输出结果
    console.log(findMinimumX(s, t, a, b));
});

/**
 * 计算最小的 x 值,使得 (t - s - a * x) 或 (t - s + a * x) 是 b 的倍数
 *
 * @param {number} s 起始值
 * @param {number} t 目标值
 * @param {number} a 步长 a
 * @param {number} b 步长 b 的倍数
 * @returns {number} 最小的非负整数 x
 */
function findMinimumX(s, t, a, b) {
    // 计算目标差值
    let diff = t - s;

    // 初始化 x 为 0
    let x = 0;

    // 枚举 x
    while (true) {
        // 检查是否满足条件:正向使用 a
        let positiveX = (diff - a * x) / b;
        // 检查是否满足条件:反向使用 a
        let negativeX = (diff + a * x) / b;

        // 如果满足任意条件,返回 x
        if (Number.isInteger(positiveX) || Number.isInteger(negativeX)) {
            return Math.abs(x); // 确保返回非负整数
        }

        // 增加 x 的值
        x++;
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

注意:

如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏

注:本文转载自blog.csdn.net的CodeClimb的文章"https://blog.csdn.net/CodeClimb/article/details/145059348"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top