循环赛日程表 (C++)
//
//Description:循环赛日程表
//
#include <iostream>
#include <math.h>
using namespace std;
int array[100][100];
void output(int k)
{
cout << "\n循环赛日程表为 " << endl;
for (int z = 1; z <= pow(2, k); z++)
{
for (int m = 1; m <= pow(2, k); m++)
{
cout << array[z] << '\t';
}
cout << endl;
}
}
void ttt(int k, int array[100][100])
{
int n = 1;
for (int i = 1; i <= k; i++)
n *= 2;
for (int p = 1; p <= n; p++)
array[1][p] = p;
int m = 1;
for (int s = 1; s <= k; s++)
{
n /= 2;
for (int t = 1; t <= n; t++)
for (int a = m + 1; a <= 2 * m; a++)
for (int b = m + 1; b <= 2 * m; b++)
{
array[a][b + (t - 1)*m * 2] = array[a - m][b + (t - 1)*m * 2 - m];
array[a][b + (t - 1)*m * 2 - m] = array[a - m][b + (t - 1)*m * 2];
}
m *= 2;
}
}
void main()
{
int k;
cout << "输入k的数值(比赛人数为 2^k)\n" << endl;
cin >> k;
ttt(k, array);
output(k);
}