2026/6/9 19:20:49
网站建设
项目流程
车网站模板预览,最新网站制作,代理记账如何获取客户,网站切换中英文挑选宝石 2025华为OD机试双机位B卷 - 华为OD上机考试双机位B卷 100分题型 华为OD机试双机位C卷真题目录点击查看: 华为OD机试双机位C卷真题题库目录#xff5c;机考题库 算法考点详解
题目描述
游乐园有一款互动游戏#xff0c;游戏开始时会提供n个宝石#xff0c;每个宝…挑选宝石2025华为OD机试双机位B卷 - 华为OD上机考试双机位B卷 100分题型华为OD机试双机位C卷真题目录点击查看: 华为OD机试双机位C卷真题题库目录机考题库 算法考点详解题目描述游乐园有一款互动游戏游戏开始时会提供n个宝石每个宝石都一个属性值a1,a2,…an.玩家在游戏前可以挑选x颗宝石将这些宝石的属性值相乘组成玩家的属性值。游戏玩家需要y点属性值请帮助游戏玩家计算有多少种计算方式。输入描述第一行三个整数n,x,y第一个整数n(0 n 20)表示宝石总数量。第二个整数x(0x n)表示可以选择宝石个数第三个整数y表示通过游戏需要的属性值第二行n个整数a1,a2,…an(-100 ai 100)表示每个宝石的属性值。输出描述输出一个整数表示玩家可以通过游戏的挑选方式的数量。用例1输入4 2 8 2 -3 4 5输出3题解思路二进制枚举于n 20数据量对应2^20比较小可以采用二进制暴力枚举判断。二进制枚举的规则如果一个20位的二进制数二进制为1的位置代表会选择对应宝石例如101表示会选中第1和第3个宝石枚举范围为[1, 2 ^ n -1], 对于每个枚举值先求出所有二进制为1的位置用数组position保存首先判断position的数量是否等于x不等于直接跳过。将所有宝石的值进行相乘然后判断是否大于y,大于y的话直接结果1。这里a的值范围比较大非python用户尽量使用大的数据类型进行保存防止溢出输出结果。c语言#include stdio.h int main() { int n, x; long long y; scanf(%d %d %lld, n, x, y); int ans[25]; // 假设 n 不会太大20 很常见 for (int i 0; i n; i) { scanf(%d, ans[i]); } int res 0; // 枚举所有非空子集 for (int mask 1; mask (1 n); mask) { int cnt 0; // 已选元素个数 long long product 1; // 当前乘积 for (int i 0; i n; i) { // 判断第 i 位是否被选中 if (mask (1 i)) { cnt; // 超过 x 个直接剪枝 if (cnt x) { break; } product * ans[i]; } } // 必须刚好选 x 个 if (cnt x product y) { res; } } printf(%d\n, res); return 0; }相关链接本题包含其它多语言实现可以点击跳转实现:华为OD机试双机位C卷 - 挑选宝石 (C Python JAVA JS GO)