java 拔河比赛

闲的无聊看到这样的一个游戏就写了一下
一个学校举行拔河比赛,所有的人被分成了两组,每个人必须(且只能够)在其中的一组,要求两个组的人数相差不能超过1,且两个组内的所有人体重加起来尽可能地接近。
package com.bahe;

import java.util.*;

public class BaHe {
 public static int TOTAL = 0;
 public static int[] arrayAll;
 public static int[] a;
 public static int Q = 0;

 public static void main(String args[]) {
  Scanner inputNum = new Scanner(System.in);
  int num = inputNum.nextInt();
  int r = (int) (num / 2);
  int[] list = new int[num];

  for (int i = 0; i < num; i++) {
   list[i] = num - i;
  }
  a = new int[num];
  for (int i = 0; i < num; i++) {
   a[i] = inputNum.nextInt();
  }
  InintialArray(num, (int) (num / 2));
  Combination(list, r, 0, num);
  Print();
 }

 static void Combination(int[] list, int r, int low, int n) {
  if (low < r) {
   for (int j = low; j < n; j++) {
    if ((low > 0 && list[j] < list[low - 1]) || low == 0) {
     int temp = list[low];
     list[low] = list[j];
     list[j] = temp;
     Combination(list, r, low + 1, n);
     temp = list[low];
     list[low] = list[j];
     list[j] = temp;
    }
   }
  }
  if (low == r) {
   int singleSum = 0;
   for (int i = 0; i < r; i++) {
    singleSum += a[list[i] - 1];
   }
   arrayAll[Q++] = (CcWeighAll(a) - singleSum) > singleSum ? (CcWeighAll(a)
     - singleSum - singleSum)
     : 2 * singleSum - CcWeighAll(a);
  }
 }

    //初始化数据
 public static void InintialArray(int num, int b) {
  int sort = 0, big = 1, little = 1;
  for (int i = num + 1 - b; i <= num; i++) {
   big *= i;
  }
  for (int i = 1; i <= b; i++) {
   little *= i;
  }
  sort = big / little;
  arrayAll = new int[sort];
 }

 //打印结果
 public static void Print() {
  Arrays.sort(arrayAll);
  for (int i = 0; i < arrayAll.length; i++) {
   if (arrayAll[i] >= 0) {
    System.out.println((CcWeighAll(a) - arrayAll[i]) / 2);
    System.out.println((CcWeighAll(a) + arrayAll[i]) / 2);
    break;
   }
  }
 }

 //计算总重量
 public static int CcWeighAll(int a[]) {
  int sum = 0;
  for (int i = 0; i < a.length; i++) {
   sum += a[i];
  }
  return sum;
 }

}

猜你喜欢

转载自blog.csdn.net/H291850336/article/details/56900447
今日推荐