游戏分组 - 华为OD统一考试

OD统一考试

分值: 100分

题解: Java / Python / C++

alt

题目描述

部门准备举办一场王者荣耀表演赛,有 10 名游戏爱好者参与,分为两队,每队 5 人。

每位参与者都有一个评分,代表着他的游戏水平。为了表演赛尽可能精彩,我们需要把 10 名参赛者分为实力尽量相近的两队。

一队的实力可以表示为这一队 5 名队员的评分总和。

现在给你 10 名参与者的游戏水平评分,请你根据上述要求分队,最后输出这两组的实力差绝对值。

输入描述

10 个整数,表示 10 名参与者的游戏水平评分。范围在 [1,10000] 之间。

输出描述

实力最相近两队的实力差绝对值。

示例1

输入:
1 2 3 4 5 6 7 8 9 10输出:
1说明:
10 名队员分为两组,两组实力差绝对值最小为 1

题解

核心是通过递归穷举所有可能的分组情况,计算两组实力之差的绝对值,最终找到实力最相近的两组。这是一种暴力穷举的方法,对于题目中给定的规模,是可行的。

此题的特点:

  • 通过递归穷举分组情况。
  • 利用全局变量记录最小差值。
  • 对每一种分组情况计算实力差值。

Java

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;/*** @author code5bug*/
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);List<Integer> list = new ArrayList<>();while (scanner.hasNext()) list.add(scanner.nextInt());Solution solution = new Solution(list);solution.solve(0, 0, 0);System.out.println(solution.minDifference);}}class Solution {List<Integer> arr;int total, n, minDifference;public Solution(List<Integer> arr) {this.arr = arr;this.n = arr.size();this.minDifference = Integer.MAX_VALUE;this.total = arr.stream().mapToInt(Integer::intValue).sum();}public void solve(int idx, int selectCnt, int selectSum) {if (selectCnt == n / 2) {minDifference = Math.min(minDifference, Math.abs(total - 2 * selectSum));return;}for (int i = idx; i < n; i++) {// 不选择时solve(i + 1, selectCnt, selectSum);// 选择时solve(i + 1, selectCnt + 1, selectSum + arr.get(i));}}
}

Python

from math import infarr = list(map(int, input().split()))# 最小差值, 全部人员总实力, 人员总数
min_difference, tot, n = inf, sum(arr), len(arr)def solve(idx: int, select_cnt: int, select_sum: int):global min_differenceif select_cnt == n // 2:  # 当全部人员选择了一半时,计算两组实力差值是否更小min_difference = min(min_difference, abs(tot - 2 * select_sum))returnfor i in range(idx, n):# 不选择时solve(i + 1, select_cnt, select_sum)# 选择时solve(i + 1, select_cnt + 1, select_sum + arr[i])solve(0, 0, 0)print(min_difference)

C++

#include <bits/stdc++.h>using namespace std;int min_difference = INT_MAX;
vector<int> arr;
int tot, n;void solve(int idx, int select_cnt, int select_sum) {if (select_cnt == n / 2) {min_difference = min(min_difference, abs(tot - 2 * select_sum));return;}for (int i = idx; i < n; i++) {// 不选择时solve(i + 1, select_cnt, select_sum);// 选择时solve(i + 1, select_cnt + 1, select_sum + arr[i]);}
}int main() {// 读取输入int num;while (cin >> num) {arr.push_back(num);}tot = accumulate(arr.begin(), arr.end(), 0);n = arr.size();solve(0, 0, 0);cout << min_difference << endl;return 0;
}

‍❤️‍华为OD机试面试交流群每日真题分享): 加V时备注“华为od加群”

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/413175.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解密PGSQL数据库引擎:探索数据世界的秘密

目录 1、引言 1.1 什么是PGSQL数据库引擎 1.2 数据库引擎的重要性 1.3 解密PGSQL数据库引擎的意义 2、PGSQL数据库引擎的基础知识 2.1 什么是数据库引擎 2.2 PGSQL数据库引擎的历史和发展 2.3 PGSQL数据库引擎的特点和优势 2.4 PGSQL数据库引擎的架构和组件 3、PGSQL…

无法解析服务器的名称或地址/Wsl/0x80072eff/win10 WSL2问题解决Wsl 0x800701bc/Wsl:0x80041002

无法解析服务器的名称或地址 和 Wsl/0x80072eff 1.连VPN&#xff0c;推荐的VPN如下。(如一直显示无法连接&#xff0c;则推荐使用VPN) Anycast加速器 (any4ga.com) 优点&#xff1a;无限GB 缺点&#xff1a;较贵&#xff0c;通过银行卡充值9折后的价格是每月45元左右 …

如何获取一个德国容器

1.注册discord账号 discord注册网址:https://discord.com/ 下面是容器的discord邀请链接 https://discord.com/Discord邀请链接:https://discord.com/invite/jVMSWrchC4 2.进入discord群聊点击link 在点击网址,这个网址每星期都会变就是图中的② 3.进入容器网址,进入界面…

shell简单截取curl GET返回的body消息体

目录 需求背景&#xff1a; 示例&#xff1a; 解决方式&#xff1a; 需求背景&#xff1a; 用shell解析 curl命令GET到的消息体&#xff0c;获取body消息体里的某个字段的值,只是个简单的示例&#xff0c;可以在此基础上更改满足自己的需求 示例&#xff1a; curl一个API…

Jenkins-Pipeline

Pipeline 1 安装插件 2 新建一个 Pipline 工程 3 配置Pipeline 脚本 agent的使用可以参考这个文档 pipeline {agent anystages {stage(Build) { steps {echo Building project...}}stage(Test) { steps {echo Testing project...}}stage(Deploy) { steps {echo Deploying …

【安装VMware Tools】实现Vmware虚拟机和主机之间复制、粘贴内容、拖拽文件

https://www.bilibili.com/video/BV1rN411277B/?spm_id_from333.788.recommend_more_video.6&vd_sourcefb8dcae0aee3f1aab700c21099045395 https://blog.csdn.net/wxqian25/article/details/19406673 待解决方案&#xff1a; 重新下载ubuntu&#xff0c;然后按照 https://…

瑞_Java开发手册_(六)工程结构

文章目录 工程结构的意义(一) 应用分层(二) 二方库依赖(三) 服务器 &#x1f64a;前言&#xff1a;本文章为瑞_系列专栏之《Java开发手册》的工程结构篇&#xff0c;主要介绍应用分层、二方库依赖、服务器。由于博主是从阿里的《Java开发手册》学习到Java的编程规约&#xff0c…

美国智库发布《用人工智能展望网络未来》的解析

文章目录 前言一、人工智能未来可能改善网络安全的方式二、人工智能可能损害网络安全的方式三、人工智能使用的七条建议四、人工智能的应用和有效使用AI五、安全有效地使用人工智能制定具体建议六、展望网络未来的人工智能&#xff08;一&#xff09;提高防御者的效率&#xff…

c++基础3

一 、构造函数的初始化列表 可以指定成员对象的初始化方式 构造函数的初始化列表是在 C 中用于初始化成员变量的一种机制。它在构造函数的参数列表之后&#xff0c;构造函数的函数体之前使用&#xff0c;并使用冒号 : 分隔。初始化列表可以用于给成员变量赋初值&#xff0c;而不…

C#,入门教程(19)——循环语句(for,while,foreach)的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(18)——分支语句&#xff08;switch-case&#xff09;的基础知识https://blog.csdn.net/beijinghorn/article/details/124039953 一、for循环 当老师进入教室&#xff0c;从门口开始分别按行、列点名&#xff0c;看看哪位翘课&…

Elastic Stack(1):Elastic Stack简介

1 简介 ELK是一个免费开源的日志分析架构技术栈总称&#xff0c;官网https://www.elastic.co/cn。包含三大基础组件&#xff0c;分别是Elasticsearch、Logstash、Kibana。但实际上ELK不仅仅适用于日志分析&#xff0c;它还可以支持其它任何数据搜索、分析和收集的场景&#xf…

Docker(三)使用 Docker 镜像

作者主页&#xff1a; 正函数的个人主页 文章收录专栏&#xff1a; Docker 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01; 使用 Docker 镜像 在之前的介绍中&#xff0c;我们知道镜像是 Docker 的三大组件之一。 Docker 运行容器前需要本地存在对应的镜像&#x…