循环比赛日程表

循环比赛日程表

Description

设有N个选手进行循环比赛,其中N=2M,要求每名选手要与其他N-1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N-1天,要求每天没有选手轮空。

Input

输入正整数M。

Output

表格形式输出比赛安排表。(整数之间用空格隔开,详见样例)

第一行输出n个数,表示选手的编号。

后面紧接n-1行,每行表示一天的比赛安排。

Sample Input

3

Sample Output

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

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF=0x3f3f3f3f;
const int MAX_N=2e2;
int a[MAX_N][MAX_N];
//分左上,左下,右上,右下 
//规律很多 
int main(){
	int M,n,t;
	while(scanf("%d",&M)!=EOF){
		n=1;
		a[1][1]=1; a[1][2]=2;
		a[2][1]=2; a[2][2]=1;
		while(n<=M){
			t=1<<n;
			for(int i=1;i<=t;i++){
				for(int j=1;j<=t;j++){
					//右上 
					a[i][j+t]=a[i][j]+t;
					//左下 
					a[i+t][j]=a[i][j]+t;
					//右下 
					a[i+t][j+t]=a[i][j];
				}
			}
			n++;
		}
		t=1<<M;
		for(int i=1;i<=t;i++){
			for(int j=1;j<t;j++)
				printf("%d ",a[i][j]);
			printf("%d\n",a[i][t]);	
		}
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值