Tsinsen-A1103 ====单循环赛制====固定轮转法。。

参考:单循环赛制:http://blog.sina.com.cn/s/blog_7800b1590101221s.html



下面的代码。。很难看,丑的快掉渣了,看了眼睛会流血。。。


#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<iomanip>
using namespace std;
const int maxn = 100;
struct node{
	int x, y;
	node(int _x=0, int _y=0) {
		x = _x;
		y = _y;
	}; 
}a[maxn][maxn];

void Print(int r, int c) {
	for(int i = 0; i < r; i++) {
		for(int j = 0; j < c; j++)
			cout << setw(2)<< a[i][j].x << "-" << setw(2) << a[i][j].y;
		cout << endl;
	} 
}
void Print2(int r, int c) {
	int cas = 0;
	for(int i = c-1; i >= 0; i--) { //列 
		cout << "<"<< ++cas <<">" ;
		for(int j = 0; j < r; j++) { //行 
			int minn = min(a[j][i].x, a[j][i].y);
			int maxn = max(a[j][i].x, a[j][i].y);
			cout << minn << "-" << maxn << " ";
		}
		cout << endl;
	}
}
int main() {
	int n;
	cin >> n;
	// 一共会举行的天数:队数-(队数+1)%2;  这个就是判断奇数偶数 
	//一共会举行的场数:队数*(队数-1)/2; 
	//一共有2^n个队伍
	int c = (int)pow(2,n)-((int)pow(2,n)+1)%2;  //这里其实可以直接2^n-1的, 因为2^n必然是偶数! 
	//我用  固定轮转编排法: 打个表 
	int r = (int)pow(2,n)/2;
	int x = 0;
	for(int i = 0; i < r; i++)
		a[i][0] = node(++x, (int)pow(2,n)-x); 
	for(int j = 1; j < c; j++) {
		for(int i = 0; i < r-1; i++) {
			a[i][j].y = a[i+1][j-1].y;
		}
		a[r-1][j].y = a[r-1][j-1].x;
		for(int i = r-1; i ; i--)
			a[i][j].x = a[i-1][j-1].x;
		a[1][j].x = a[0][j-1].y;
		a[0][j].x = 1;
	}
	//Print(r, c);
	Print2(r, c);
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值