思路
利用分治思想,我们每次只需确定一半的人比赛,另一半的直接根据那个确定的填就完事了
#include <iostream>
#include <cmath>
using namespace std;
const int N = 1050;
int a[N][N];
void arrange(int n, int first, int i, int j)
{
if (n == 1)
a[i][j] = first;
else
{
arrange(n / 2, first, i, j);
arrange(n / 2, first + n / 2, i, j + n / 2);
arrange(n / 2, first + n / 2, i + n / 2, j);
arrange(n / 2, first, i + n / 2, j + n / 2);
}
}
int main()
{
int m;
cin >> m;
int n = pow(2, m);
arrange(n, 1, 1, 1);
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
cout << a[i][j] << ' ';
cout << endl;
}
return 0;
}