#include<iostream> using namespace std; const int maxn=1025; int a[maxn][maxn]; void dg(int n,int m,int x,int y){ if(n==0) a[x][y]=m; else{ //用递归实现2x2的分治 --n; int size = 1<<n; //左移,1<<n表示2^n dg(n,m,x,y); //左上角 dg(n,m+size,x,y+size); //右上角 dg(n,m+size,x+size,y); //左下角 dg(n,m,x+size,y+size); //右下角 } } int main(){ int n; cin >> n; dg(n,1,1,1); int m=1<<n; //2^n for(int i=1;i<=m;++i) for(int j=1;j<=m;++j) cout << a[i][j] << " \n"[j==m]; return 0; }