您的位置:首页 > 汽车 > 新车 > 华为OD-D卷游戏分组

华为OD-D卷游戏分组

2025/4/22 23:06:00 来源:https://blog.csdn.net/weixin_42282025/article/details/140959544  浏览:    关键词:华为OD-D卷游戏分组

部门准备举办一场王者荣耀表演赛,有10名游戏爱好者参与,分为两队,每队5人。每位参与者都有一个评分,代表着他的游戏水平。为了表演赛尽可能精彩,我们需要把10名参赛者分为实力尽量相近的两队。一队的实力可以表示为这一队5名队员的评分总和。

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

例:10名参赛者的评分分别为5 1 8 3 4 6 7 10 9 2,分组为(1 3 5 8 10)(2 4  6 7 9),两组实力差最小,差值为1。有多种分法,但实力差的绝对值最小为1。

输入描述:

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

输出描述:

1个整数,表示分组后两组实力差绝对值的最小值。

题目解析:关键在于如何找到两组实力差最小的分组,想起以前小时候玩的斗鸡游戏,一般都是由实力最强的和实力第二强的来选队友,然后哪一队实力稍弱了,我们就让这一队先选就好。

一开始感觉有点像背包问题,我们算出总的游戏水平评分,然后把背包大小设置为总评分的一半往里面放就行,后来发现还需要保证每个组都是五人,这样就不太适用了。

import java.util.*;public class Main {public static void main(String[] args) {
//        int[] nums = new int[]{5, 1, 8, 3, 4, 6, 7, 10, 9, 2};// 处理数据Scanner scanner = new Scanner(System.in);int[] nums = new int[10];for (int i = 0; i < 10; i++) {nums[i] = scanner.nextInt();}// 按照实力排序放到栈中,这样每次取出来的都是现有最强的Arrays.sort(nums);Stack<Integer> stack = new Stack<>();for (int i = 0; i < nums.length; i++) {stack.add(nums[i]);}// 统计两个队伍的总评分int sum1 = 0;int sum2 = 0;while (!stack.isEmpty()) {// 哪个队伍弱了,就先选if (sum1 <= sum2) {sum1 += stack.pop();sum2 += stack.pop();} else {sum2 += stack.pop();sum1 += stack.pop();}}System.out.println(Math.abs(sum2 - sum1));}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com