跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

华为 OD 机试真题:挑选宝石 Python & JS 实现

对华为 OD 机试真题“挑选宝石”提供解决方案。题目给定 n 个宝石及其属性值,需从中选取 x 个使乘积大于等于 y,求方案数。因 n 较小(<20),采用暴力枚举组合的方法。文中包含 Python 与 JavaScript 两种语言的完整实现代码及逻辑说明。

GRACE Grace发布于 2026/3/28更新于 2026/10/2491 浏览
华为 OD 机试真题:挑选宝石 Python & JS 实现

题目

游乐园有一款互动游戏,游戏开始时会提供 n 个宝石,每个宝石都有一个属性值 a1, a2... an。玩家在游戏前可以挑选 x 颗宝石,将这些宝石的属性值相乘组成玩家的属性值。游戏玩家需要 y 点属性值,请帮助游戏玩家计算有多少种计算方式。

输入描述 第一行:三个整数 n, x, y

  • 第一个整数 n (0 < n < 20) 表示宝石总数量。
  • 第二个整数 x (0 < x <= n),表示可以选择宝石个数。
  • 第三个整数 y,表示通过游戏需要的属性值。

第二行:n 个整数,a1, a2... an (-100 < ai < 100),表示每个宝石的属性值。

输出描述 输出一个整数,表示玩家可以通过游戏的挑选方式的数量。

示例 1 输入: 4 2 8 2 -3 4 5

输出: 3

思路

题目中 N 的取值范围较小 (N < 20),可以直接使用组合数学的方法暴力枚举所有可能的宝石组合,计算乘积并判断是否大于等于 Y 即可。

Code

Python

import sys
from itertools import combinations

def solve():
    line1 = sys.stdin.readline().strip()
    if not line1:
        return
    n, x, y = map(int, line1.split())
    
    # 读取第二行输入 a1, a2 ... an
    line2 = sys.stdin.readline().strip()
    if not line2:
        a = []
    else:
        a = list(map(int, line2.split()))
    
    # 题目要求选择 x 颗宝石,计算乘积大于等于 y 的组合数
    # 数据范围 n < 20,比较小,可以直接用 itertools.combinations 暴力枚举
    count = 0
    # 遍历所有长度为 x 的组合
    for combo in combinations(a, x):
        product = 1
        for val in combo:
            product *= val
        if product >= y:
            count += 1
    print(count)

if __name__ == "__main__":
    solve()

JavaScript

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

let lines = [];
rl.on('line', (line) => {
    lines.push(line.trim());
});

rl.on('close', () => {
    if (lines.length === 0) return;
    
    // 读取第一行输入 n, x, y
    const firstLine = lines[0].split(/\s+/);
    if (firstLine.length < 3) return;
    const n = parseInt(firstLine[0]);
    const x = parseInt(firstLine[1]);
    const y = parseInt(firstLine[2]);
    
    // 读取第二行输入 a1, a2 ... an
    let a = [];
    if (lines.length > 1 && lines[1] !== '') {
        a = lines[1].split(/\s+/).map(Number);
    }
    
    // 题目要求选择 x 颗宝石,计算乘积大于等于 y 的组合数
    // 数据范围 n < 20,比较小,可以直接用递归暴力枚举
    let count = 0;
    
    // 递归函数生成组合
    function combine(startIndex, currentCount, currentProduct) {
        // 如果选够了 x 个宝石
        if (currentCount === x) {
            if (currentProduct >= y) {
                count++;
            }
            return;
        }
        
        // 遍历所有可能的组合
        for (let i = startIndex; i < n; i++) {
            // 剪枝优化:如果剩余的元素不足以填满 x 个,则不再继续
            if (n - i < x - currentCount) {
                break;
            }
            combine(i + 1, currentCount + 1, currentProduct * a[i]);
        }
    }
    
    combine(0, 0, 1);
    console.log(count);
});

目录

  1. 题目
  2. 思路
  3. Code
  4. Python
  5. JavaScript

更多推荐文章

查看全部
  • Python 开发工具 uv 安装、配置与最佳实践
  • WordPress 基础配置与 Spring Boot + MyBatis-Plus 实战
  • 主成分分析(PCA)原理与实战应用
  • AI 辅助自动生成 WPS Visio 流程图实战指南
  • 2023 中国大模型落地应用案例集核心洞察
  • 基于 DeepFace 与 OpenCV 的实时情绪分析器实现
  • Web3.0 面临的网络安全风险与挑战深度解析
  • 无项目经验如何转行 AIGC 产品经理:职责、技能与成长路径
  • Spring Cloud 与 Dubbo 架构选型:生态全家桶 vs RPC 特种兵
  • 人工智能大模型基础:历史演进与核心技术解析
  • 数据结构:二叉树基础概念与链式存储实现
  • 深入解析 Spark 数据读取与 Hive 数据来源
  • 大模型显存占用详解:单卡训练与推理
  • 国产主流 AI 大模型工具功能对比与使用场景指南
  • 大模型技术入门:基础概念、训练与微调实战指南
  • OpenCode、OpenClaw 与 Ollama 本地 AI 智能体安装配置
  • Web Worker:前端多线程开发的隐形引擎
  • 2026 年 3 月全球 AI 前沿动态:模型、智能体与产业融合
  • GLM-5 大模型代码生成实战评测与参数调优
  • 基于 FPGA 的日志及参数文件存储设计

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online