赞
踩
一、题目
题目描述:
部门准备举办一场 王者荣耀表演赛,有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代码示例
- package hw10.Test_100.Test_40;
-
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Scanner;
-
- public class Test40_1 {
- /**
- * 游戏分组,求最小绝对值
- *
- * @param args
- */
- public static void main(String[] args) {
- // 输入
- Scanner in = new Scanner(System.in);
- List<Integer> list = new ArrayList<>();
- int sum = 0;
- for (int j = 0; j < 10; j++) {
- int a = in.nextInt();
- list.add(a);
- sum += a;
- }
-
- int back = sum;
-
- for (int l1 = 0; l1 < 10; l1++) {
- for (int l2 = l1 + 1; l2 < 10; l2++) {
- int add12 = list.get(l1) + list.get(l2);
- for (int l3 = l2 + 1; l3 < 10; l3++) {
- int add23 = add12 + list.get(l3);
- for (int l4 = l3 + 1; l4 < 10; l4++) {
- int add34 = add23 + list.get(l4);
- for (int l5 = l4 + 1; l5 < 10; l5++) {
- int add45 = add34 + list.get(l5);
- back = Math.min(back, Math.abs(sum - add45 - add45));
- }
- }
- }
-
- }
- }
-
- System.out.println(back);
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。