《算法分析与设计及案例教程》P61
#include <iostream>
using namespace std;
int a[1024][1024];
void merger(int n){
int m=n/2;
for(int i=0;i<m;i++){
for(int j=0;j<m;j++){
a[i][j+m]=a[i][j]+m;//左上算出右上
a[i+m][j]=a[i][j+m];//右上算出左下
a[i+m][j+m]=a[i][j];//左上算出右下
}
}
}
void arrangement(int n){
if(n==1){
a[0][0]=1;
return;
}
arrangement(n/2);
merger(n);
}
int main(){
int n;
cout<<"请输入有多少人比赛"<<endl;
cin>>n;
arrangement(n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}