基础(二)--- 比赛安排

【问题描述】

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

【输入】

输入共一行,输入nn的数值。

【输出】

输出共2n−12n−1行,第ii行输出第ii天的比赛安排。

格式为:<ii>A-B C-D ……。其中ii是天数,A,B分别为比赛双方的编号,每行共2n−12n−1个比赛场次。

【输入样例】

2

【输出样例】

<1>1-2 3-4

<2>1-3 2-4

<3>1-4 2-3

 【数据规模和约定】

1≤n≤4

==============================================

代码:

import java.util.Scanner;

public class Main{
	
	//初始化
	public static void Itint(int m,int n[]) {
		for (int i = 0; i < m; i++) {
			n[i] = 0;
		}
	}
	
	//返回没有进行比赛的编号
	public static int DoSome(int m,int n[],int k) {
		for (int i = k; i < m; i++) {
			if(n[i] == 0) {
				return i;
			}
		}
		return -1;
	}
		

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scan = new Scanner(System.in);
		double a = scan.nextDouble();
		int m = (int)Math.pow(2.0, a);
		int [][]s = new int[m][m];
		int n[] = new int [m];
		
		for (int i = 0; i < s.length; i++) {
			for (int j = 0;j < s[i].length; j++) {
				if(i == j) {
					s[i][j] = 1;
				}
				else {
					s[i][j] = 0;					
				}

			}
		}
		
		//2^n-1 行
		for (int i = 0; i < s.length-1; i++) {
			Itint(m, n);
			System.out.print("<"+(i+1)+">1-"+(i+2));
			s[0][i+1] = 1;
			s[i+1][0] = 1;
			n[0] = n[i+1] = 1;
			
			//每一行的循环
			for (int j = 0; j < s[i].length; j++) {
				int f1 = DoSome(m, n, 0);
				if(f1 > -1) {
					int f2 = DoSome(m, n, 0);
					while(s[f1][f2] == 1) {
						f2 = DoSome(m, n, f2+1);
					}
						
					n[f1] = n[f2] = 1;
					System.out.print(" "+(f1+1)+"-");
					System.out.print(f2+1);
					s[f1][f2] = 1;
					s[f2][f1] = 1;
				}
				else {
					break;
				}
			}
			System.out.println();
		}

	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值