设有2^n(n<=6)个球队进行单循环比赛,计划在2 n – 1天内完成,每个队每天进行一场比赛。设计一个比赛的安排,使在2n – 1天内每个队都与不同的对手比赛。
例如n=2时的比赛安排:
队 1 2 3 4
比赛 1==2 3==4 一天
1==3 2==4 二天
1==4 2==3 三天
输入格式
每个测试文件只包含一组测试数据,每组输入数据为一个正整数n(n<=6)。
输出格式
对于每组输入数据,输出比赛安排,从第一天的安排开始,每天占一行,每行开头先输出天号,再输出当天的安排,优先给队伍编号小的队伍安排比赛,具体格式见样例输出。
样例
输入数据 1
2
Copy
输出数据 1
<1>1-2,3-4
<2>1-3,2-4
<3>1-4,2-3
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = 1;
boolean[][] st = new boolean[110][110];//用于记录每场比赛的双方队伍
for(int k = 1; k < Math.pow(2, n); k++) {
boolean[] a = new boolean[110];//用于记录每天参加比赛的队伍
System.out.print('<' + Integer.toString(m++) + '>');
for(int i = 1; i <= Math.pow(2, n); i++) {//遍历每一支队伍
if(!a[i]) {
a[i] = true;//标记当天已经训练过的队伍
for(int j = i + 1; j <= Math.pow(2, n); j++) {//遍历外层循环没有遍历到的队伍
if(!a[j] && !st[i][j]) {
if(i != 1) System.out.print(',');
System.out.print(i + "-" + j);
st[i][j] = true;//标记比赛的双方队伍
a[j] = true;//标记
break;
}
}
}
}
System.out.println();
}
}
}