#include <iostream>
#include <math.h>
using namespace std;
static int data[129][129];
void Merge(int num)
{
for(int i = 1;i <= num/2; i++)
for(int j = 1;j <= num/2; j++)
{
data[i][j+num/2] = data[i][j]+(num/2); //正右方填充
data[i+num/2][j] = data[i][j]+(num/2); //正下方填充
data[i+num/2][j+num/2] = data[i][j]; //右下方填充
}
}
void Manage(int num,int n) //num表示方阵的大小,n表示迭代的层次
{
if(n==0)
{
data[1][1] = 1;
}
else
{
Manage(num/2,n-1);
Merge(num);
}
}
void Show(int num)
{
for(int i = 1;i <= num/2; i++)
{
for(int j = 1;j <= num/2; j++)
cout<<data[i][j]<<" ";
cout<<endl;
}
}
int main()
{
int n,num;
cin>>n;
n++;
num = powl(2,n);
Manage(num,n);
Show(num);
return 0;
}
原文:http://www.cnblogs.com/lxk2010012997/p/4357913.html