当前位置: 代码迷 >> 综合 >> 蓝桥杯——ALGO-65—— 算法训练 比赛安排
  详细解决方案

蓝桥杯——ALGO-65—— 算法训练 比赛安排

热度:30   发布时间:2023-11-29 15:00:49.0

资源限制:

时间限制:1.0s 内存限制:512.0MB

问题描述:

  设有有2 n(n<=6)个球队进行单循环比赛,计划在2 n – 1天内完成,每个队每天进行一场比赛。设计一个比赛的安排,使在2 n – 1天内每个队都与不同的对手比赛。

输入格式:

  输入文件matchplan.in共一行,输入n的数值。

输出格式:

  输出文件matchplan.out共(2 n – 1)行,第i行输出第i天的比赛安排。
  格式为:<i> A-B,C-D,……。其中i是天数,A,B分别为比赛双方的编号,每行共2 n-1个比赛场次。

样例输入:

2

样例输出:

<1>1-2,3-4
<2>1-3,2-4
<3>1-4,2-3

思路:
以n=3为例,总共8个人,7天,那么第一列必是1和另外七个人打。
后面的还没打过的两两一组,但是注意如果他们俩前些日子打过了,就不要安排他们一起打了

代码如下:

import java.util.*;
import java.util.Arrays;public class Main
{public final static int size=1<<6;public static void main(String[] args) {Scanner sc=new Scanner(System.in);int a[][]=new int[size+1][size+1];int v[]=new int[size+1];int n=sc.nextInt();int len=(int) Math.pow(2, n);for (int i = 1; i <=len-1; i++) {Arrays.fill(v, 0);System.out.print("<"+i+">");for (int j = 1; j <= len/2; j++) {for (int k = 1; k <=len; k++) {if (v[k]==1) {continue;}for (int h = 1; h <=len; h++) {if (h==k) {continue;}if (v[h]==1) {continue;}if (a[h][k]==0&&a[k][h]==0) {System.out.print(k+"-"+h+" ");v[k]=1;v[h]=1;a[k][h]=1;a[h][k]=1;break;}}}}System.out.println();}}}

运行结果如下:

 

  相关解决方案