1 #include<iostream> 2 using namespace std; 3 #define MAX 100 4 int a[MAX][MAX]; 5 void copy(int fx,int fy,int tx,int ty,int r) 6 { 7 int i,j; 8 for(i=0;i<r;i++) 9 for(j=0;j<r;j++) 10 a[tx+i][ty+j]=a[fx+i][fy+j]; 11 } 12 void build(int n) 13 { 14 int i,j; 15 for(i=1;i<=n;i++) 16 a[0][i-1]=i; 17 for(i=1;i<n;i=i*2) 18 { 19 for(j=0;j<n;j=j+i*2) 20 { 21 copy(0,j,i,i+j,i); 22 copy(0,j+i,i,j,i); 23 } 24 } 25 } 26 void out(int n) 27 { 28 int i,j; 29 for(i=0;i<n;i++) 30 { 31 for(j=0;j<n;j++) 32 cout<<a[i][j]<<" "; 33 cout<<endl; 34 } 35 } 36 int main() 37 { 38 int n; 39 cin>>n; 40 build(n); 41 out(n); 42 return 0; 43 }
eg.
输入:
8
输出:
1 2 3 4 5 6 7 8
2 1 4 3 6 5 8 7
3 4 1 2 7 8 5 6
4 3 2 1 8 7 6 5
5 6 7 8 1 2 3 4
6 5 8 7 2 1 4 3
7 8 5 6 3 4 1 2
8 7 6 5 4 3 2 1