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

来源:互联网 发布:看病软件哪个好 编辑:程序博客网 时间:2024/05/17 02:48

参考:单循环赛制: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