当前位置:   article > 正文

华为OD机试真题-游戏分组-2023年OD统一考试(C卷)_华为笔试 游戏分组

华为笔试 游戏分组

一、题目

题目描述:
部门准备举办一场 王者荣耀表演赛,有10名游戏爱好者参与,分为两队,每队5人。每位参与者都有一个评分,代表着他的游戏水平。为了表演赛尽可能精彩,我们需要把10名参赛者分为实力尽量相近的两队。一队的实力可以表示为这一队5名队员的评分总
和。现在给你10名参与者的游戏水平评分,请你根据上述要求分队,最后输出这两组的实力差绝对值。例:10名参赛者的评分分别为5 1 8 3 4 6 7 1 0 9 2,分组为(1 3 5 8 1 0)(2 4 6 7 9),两组实力差最小,差值为1。有多种分法,但实力差的绝对值最小为1。


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

输出描述:
1个整数,输出分组后两组实力差绝对值的最小值


示例1
输入:
1 2 3 4 5 6 7 8 9 10
输出:

1
说明:10名队员分成两组,两组实力差绝对值最小为1。

二、思路

先计算10个数总和sum,5层for循环遍历并求和得到a,用sum减去a再减a,即可得到两组数据的差值,每次求完差,和之前的最小值比较,并返回

三、Java代码示例

  1. package hw10.Test_100.Test_40;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Scanner;
  5. public class Test40_1 {
  6. /**
  7. * 游戏分组,求最小绝对值
  8. *
  9. * @param args
  10. */
  11. public static void main(String[] args) {
  12. // 输入
  13. Scanner in = new Scanner(System.in);
  14. List<Integer> list = new ArrayList<>();
  15. int sum = 0;
  16. for (int j = 0; j < 10; j++) {
  17. int a = in.nextInt();
  18. list.add(a);
  19. sum += a;
  20. }
  21. int back = sum;
  22. for (int l1 = 0; l1 < 10; l1++) {
  23. for (int l2 = l1 + 1; l2 < 10; l2++) {
  24. int add12 = list.get(l1) + list.get(l2);
  25. for (int l3 = l2 + 1; l3 < 10; l3++) {
  26. int add23 = add12 + list.get(l3);
  27. for (int l4 = l3 + 1; l4 < 10; l4++) {
  28. int add34 = add23 + list.get(l4);
  29. for (int l5 = l4 + 1; l5 < 10; l5++) {
  30. int add45 = add34 + list.get(l5);
  31. back = Math.min(back, Math.abs(sum - add45 - add45));
  32. }
  33. }
  34. }
  35. }
  36. }
  37. System.out.println(back);
  38. }
  39. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/955172
推荐阅读
相关标签
  

闽ICP备14008679号