(1)设有n=2k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表:每个选手必须与其他n-1个选手各赛一次,每个选手一天只能赛一次,循环赛一共进行n-1天。
package algorithm;
import java.util.Arrays;
import java.util.Scanner;
public class GameList_2 {
static int k,n=2;
static int a[][]=new int[100][100];
static void List(int k){
n=2;
a[1][1]=1;
a[1][2]=2;
a[2][1]=2;
a[2][2]=1;
for(int t=2;t<=k;t++){
int temp=n;
n=n*2;
//右下角
for(int i=temp+1;i<=n;i++){
for(int j=temp+1;j<=n;j++){
a[i][j]=a[i-temp][j-temp];
}
}
//左下角
for(int i=temp+1;i<=n;i++){
for(int j=1;j<=n/2;j++){
a[i][j]=a[i-temp][j]+n/2;
}
}
//右上角
for(int i=1;i<=n/2;i++){
for(int j=temp+1;j<=n;j++){
//a[i][j]=a[i+temp][j-temp];
a[i][j]=a[i][j-temp]+n/2;
}
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
for(int i=0;i<100;i++)
Arrays.fill(a[i],0);
k=sc.nextInt();
List(k);
for(int i=1;i<=n;i++){
System.out.print("选手"+a[i][1]+": ");
for(int j=2;j<=n;j++)
System.out.print(a[i][j]+" ");
System.out.println();
}
}
}