模拟之 比赛安排

设有2^n(n<=6)个球队进行单循环比赛,计划在2^n – 1天内完成,每个队每天进行一场比赛。设计一个比赛的安排,使在2^n – 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

 模拟一下 ,易得代码如下:

#include <iostream>
#include <cstring>
using namespace std;
bool a[100], b[100][100];


int main() {
	int n;
	int x;
	cin >> n;
	x = 1 << n;

	for (int i = 1; i < x; i++) {
		int cnt = 0;
		memset(a, 0, sizeof(a));
		cout << "<" << i << ">";

		for (int j = 1; j < x; j++) {
			for (int k = j + 1; k <= x; k++) {
				if (!a[j] && !a[k] && !b[j][k] && !b[k][j]) {
					cout << j << "-" << k ;
					a[k] = true, a[j] = true;
					b[j][k] = true, b[k][j] = true;
					cnt++;

					if (cnt < x / 2)
						cout << ",";
				}
			}
		}

		cout << endl;
	}

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值