#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