问题描述:
输入&输出:
送上代码:
#include<iostream>
#include<cmath>
using namespace std;
void schedule(int k, int n, int** array);
int main()
{
int k;
cin >> k;
int n = pow(2, k);
int** array = new int* [n+1];
for (int i = 0;i < n+1;i++)
array[i] = new int[n+1];
schedule(k, n, array);
for (int i = 1;i <= n;i++)
{
for (int j = 1;j <= n;j++)
cout << array[i][j] << " ";
cout << "\n";
}
for (int i = 0;i < n + 1;i++)
delete[] array[i];
delete[] array;
return 0;
}
void schedule(int k, int n, int** array)
{
for (int i = 1;i <= n;i++)
array[1][i] = i;
int m = 1;
for (int s = 1;s <= k;s++)
{
n = n / 2;
for (int t = 1;t <= n;t++)
{
for (int i = m + 1;i <= 2 * m;i++)
{
for (int j = m + 1;j <= 2 * m;j++)
{
array[i][j + (t - 1) * m * 2] = array[i - m][j + (t - 1) * m * 2 - m]; //左上角等于右下角的值
array[i][j + (t - 1) * m * 2 - m] = array[i - m][j + (t - 1) * m * 2]; //左下角等于右上角的值
}
}
}
m *= 2;
}
}