【程序8】乒乓球比赛赛程安排

/*【程序8】
 * 作者  中国风
 * 乒乓球比赛赛程安排
 * 某学校举行乒乓球比赛,在初赛阶段设置为循环赛,设有n位选手参赛,
 * 初赛共进行n-1天, 每位选手要与其他每一们选手进行一场比赛,
 * 然后按积分排名选拔进入决赛的选手。根据学校作息时间, 要求每位
 * 选手每天必须比赛一场,不能轮空。按些要求为比赛安排具体日程,
 * 即决定每天各选手对阵的对手。
 */
import java.util.Scanner;

public class T008 {
	public static final int MAXN = 64;
	public static int[][] a = new int[MAXN+1][MAXN+1]; 
	// 输入参赛选手人数必须为2的整数次幂,且不超过64.
	private static void check(int m) {
		int i = 0;
		int j = 2;
		for(i=2;i<8;i++){
			j = j * 2;
			if(j==m) break;
		}
		if(i>=8){
			System.out.println("参赛选手人数必须为2的整数次幂,且不超过64.");
			System.exit(1);
		}
	}
	//从编号 k 开始的 n 个选手的日程
	public static void gamecal(int k,int n){
		if(n==2){
			a[k][1] = k;	// 参赛选手编号
			a[k][2] = k+1;	// 对阵选手编号
			a[k+1][1] = k+1;// 参赛选手编号
			a[k+1][2] = k;	// 对阵选手编号
		}else{
			gamecal(k,n/2);
			gamecal(k+n/2,n/2);
			for(int i=k; i<k+n/2; i++){	// 填充右上角
				for(int j=n/2+1; j<=n; j++){
					a[i][j] = a[i+n/2][j-n/2];
				}
			}
			for(int i=k+n/2; i<k+n; i++){	// 填充右下角
				for(int j=n/2+1; j<=n; j++){
					a[i][j] = a[i-n/2][j-n/2];
				}
			}
		}
	}
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
		int m = 0;
		System.out.print("输入人数:");
		m = scan.nextInt();
		check(m);
		gamecal(1,m);
		System.out.print("编号\t");
		for(int i=2; i<=m; i++){
			System.out.print((i-1)+"天\t");
		}
		System.out.println();
		for(int i=1;i<=m;i++){
			for(int j=1;j<=m;j++){
				System.out.print(a[i][j]+"\t");
			}
			System.out.println();
		}
	}
}


运行结果:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值