专业的编程技术博客社区

网站首页 > 博客文章 正文

C++|n个选手进行循环赛的对阵安排

baijin 2024-08-31 16:13:23 博客文章 5 ℃ 0 评论

n个选手进行循环赛(n=2^m,m为正整数),每个选手都要与另外n-1个选手进行一场比赛,怎样安排对阵表呢?

我们先看最简单的情况:


对阵呈现对称性,可以用一个二维数组表示,可以从第一个元素开始,按人数进行对称映射和循环:

//循环比赛
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <iomanip>
using namespace std;
int i,j,h,person,n;
int a[32+1][32+1];

int main()
{
	cout<<"请输入选手人数(2,4,8,16,32):";
	cin>>person;

	a[1][1]=1;
	h=1;

	do
	{
		for(i=1;i<=h;i++)
			for(j=1;j<=h;j++)
			{
				a[i][j+h]=a[i][j]+h;//构造右上角方阵
				a[i+h][j]=a[i][j+h];//构造左下角方阵
				a[i+h][j+h]=a[i][j];//构造右下角方阵
			}
			h=h*2;
	}while(!(h==person));
	
	for(i=1;i<=person;i++)
	{
		for(j=1;j<=person;j++)
			cout<<setw(4)<<left<<a[i][j];
		cout<<"\n";
	}
	system("pause");
	return 0;
}

输出如下:

请输入选手人数(2,4,8,16,32):8

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

-End-

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表