首页 > 编程 > Java > 正文

java 拔河比赛

2019-11-07 23:48:28
字体:
来源:转载
供稿:网友
闲的无聊看到这样的一个游戏就写了一下一个学校举行拔河比赛,所有的人被分成了两组,每个人必须(且只能够)在其中的一组,要求两个组的人数相差不能超过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; }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表