#include<iostream>
using namespace std;
#define max 100
int a[max][max];//输出的数组
void table(int k)//k,表示参赛选手的数量
{
int d = 1;//边长 A B
a[1][1] = 1;//初始化 C D
while (d <=k)//边长等于k才是一个完整的结果
{
for (int i = 1; i <=d; i++)//将矩形A,变成矩形B
{
for (int j = 1+d; j <= 2*d; j++)
{
a[i][j] = a[i][j-d]+d;//每个相同的位置差d。
}
}
for (int i = 1 + d; i <= 2*d; i++)//将矩形A复制到矩形D
{
for (int j = 1 + d; j <= 2 * d; j++)
{
a[i][j] = a[i - d][j - d];
}
}
for (int i = 1 + d; i <= 2 * d; i++)//将矩形B复制到矩形C
{
for (int j = 1; j <= d; j++)
{
a[i][j] = a[i - d][j + d];
}
}
d = d * 2;//边长变为原来的2倍.
}
}
int main()
{
int n;
cout << "请输入有几名参赛选手" << endl;
cin >> n;
table(n);
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
cout << a[i][j] << " ";
}cout << endl;
}
}