【无标题】

文章描述了一种解决2n个球队进行单循环比赛的安排问题,要求在2n-1天内每个队都与不同的对手比赛一次。通过暴力枚举的方法,使用两个一维数组和一个二维数组来记录已比赛的队伍,确保每天的对阵不会重复。代码示例展示了C++的实现方式。
摘要由CSDN通过智能技术生成

比赛安排

说明

设有2n(n<=6)个球队进行单循环比赛,计划在2 n – 1天内完成,每个队每天进行一场比赛。设计一个比赛的安排,使在2n – 1天内每个队都与不同的对手比赛。
例如n=2时的比赛安排:

1 2 3 4

比赛

 1==2  3==4   一天

 1==3  2==4   二天

 1==4  2==3   三天

输入格式

每个测试文件只包含一组测试数据,每组输入数据为一个正整数n(n<=6)。

输出格式

对于每组输入数据,输出比赛安排,从第一天的安排开始,每天占一行,每行开头先输出天号,再输出当天的安排,优先给队伍编号小的队伍安排比赛,具体格式见样例输出。

样例

Sample Input 1
2
Sample Output 1
<1>1-2,3-4
<2>1-3,2-4
<3>1-4,2-3


思路详解:

1.本题数据范围不大,所以这里直接采用暴力枚举的方法
2.开两个数组用于记录训练过的队伍,判断过程中需注意外层循环输出的数与内层输出的数就行
3,一维数组用于判断每天训练的不同队伍排序,二维数组用于记录总的训练过的队伍排序

源码:

#include <bits/stdc++.h>
using namespace std;

int n;
int b[100][100] = {0};

int main() {
	cin >> n;
	int s = pow(2, n);//2^n

	//	cout << a[i] << " ";
	int m = 1, n = s;

	while (--s) {
		int a[100] = {0};//记录训练过的队伍
		cout << "<" << m++ << ">"; //序号输出

		for (int i = 1; i <= n; i++) {

			if (!a[i]) {//判断内层是否已训练
				a[i] = 1;
				//	cout << a[i];

				for (int j = i + 1; j <= n; j++) {

					if (!a[j] && !b[i][j]) { //判断是否该队已经训练
						if (i != 1) //判断是否位于输出第一位
							cout << ",";

						cout << i << "-" << j;
						b[i][j] = 1;//标记第一天训练过的顺序
						a[j] = 1; //标记该轮训练的队伍
						break;
					}
				}
			}
		}
		cout << endl;
	}
	return 0;
}

明天继续!!!```


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值