#include <stdio.h> #define MAX 50 //num是2的k次方 #define NUM 16 int a[MAX][MAX]={0}; void copy(int n) { int m=n/2; for (int i=1;i<=m;i++) { for (int j=1;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 tourna(int n) { if (n==1) { a[1][1]=1; return; } tourna(n/2); copy(n); } void main() { tourna(NUM); for (int i=1;i<=NUM;i++) { for (int j=1;j<=NUM;j++) { printf("%3d",a[i][j]); } printf("/n"); } } 目前只适合于 n=2k 的情况