Java 循环比赛日程表 附有结果
//输出表格 a[i][j](i =1,2,…,n;j=2,3,…,n)表示第 i 号选手在第 j-1 天的对手
public class CirCompete {
public void Table(int k,int[][]a){
int n=1;
for(int i=1;i<=k;i++){//假设
n
k
2 个运动员要进行循环比赛
n *=2;
//通过 k 计算 n 值,实际是通过参赛人数计算出 k 值的
}
for(int i=1;i<=n;i++){
a[1][i]=i; //打印出第一行即选手 1 的赛程表
}
int m=1;//控制每次填充表格 i(i 表示行)和 j(j 表示列)的起始填充位置
for(int s=1;s<=k;s++){
n/=2;//将问题分成 k 部分
for(int t=1;t<=n;t++) {//对每一部分进行划分
for(int i=m+1;i<=2*m;i++){ //控制行
for(int j=m+1;j<=2*m;j++){//控制列
上角
上角
a[i][j +(t - 1) * m *2] = a[i - m][j + (t - 1) * m * 2 - m];//右下角等于左
a[i][j + (t - 1) * m * 2 -m] = a[i - m][j + (t - 1) * m * 2];//左下角等于右
} }
}
m*=2;
} }
public static void main(String[] args) {
CirCompete circompete = new CirCompete();
int[][] a=new int[9][9];
circompete.Table(3,a);//求
n
23
8
个选手时候的比赛日程表
for(int i=1;i<9;i++)
{
for(int j=1;j<9;j++) {
System.out.print(a[i][j]+" ");
System.out.println();
}
}}
}
运行结果:
1 2 3 4 5 6 7 8
2 1 4 3 6 5 8 7
3 4 1 2 7 8 5 6
4 3 2 1 8 7 6 5
5 6 7 8 1 2 3 4
6 5 8 7 2 1 4 3
7 8 5 6 3 4 1 2
8 7 6 5 4 3 2 1