可以找规律做这道题
每一个数字都是它上方数字加上右上方数字再模2。
其实就是不进位加法,异或一下就好了。
#include<iostream>
#include<stdio.h>
#include<iomanip>
#include<stack>
#include<set>
#include<queue>
#include<cstdlib>
#include <algorithm>
#include<string.h>
#include<math.h>
#define llu unsigned long long
using namespace std;
int a[1234][1234];
int main()
{
int n;
cin >> n ;
n=1<<n;//如果n=2,那么位移之后就变成了100,也就是十进制4,也就是2的n次方
a[0][n+1]=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
a[i][j]=a[i-1][j]^a[i-1][j+1];
cout << a[i][j] << " " ;
}
cout << endl ;
}
return 0;
}
也可以用递归
做法就是将当前矩阵的左上一块标记上,然后递归进剩下三块继续做,如果当前矩阵为 1×1 直接退出递归即可。
#include<iostream>
#include<stdio.h>
#include<iomanip>
#include<stack>
#include<set>
#include<queue>
#include<cstdlib>
#include <algorithm>
#include<string.h>
#include<math.h>
#define llu unsigned long long
using namespace std;
char a[1234][1234];
void dfs(int x,int y,int xx,int yy)
{
if(x==xx&&y==yy)return ;
int tx=(x+xx)/2,ty=(y+yy)/2;
for(int i=x;i<=tx;i++)
{
for(int j=y;j<=ty;j++)
a[i][j]='0';
}
dfs(x,ty+1,tx,yy);
dfs(tx+1,y,xx,ty);
dfs(tx+1,ty+1,xx,yy);
}
int main()
{
int n;
cin >> n ;
n=1<<n;//如果n=2,那么位移之后就变成了100,也就是十进制4,也就是2的n次方
memset(a,'1',sizeof(a));
dfs(1,1,n,n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cout << a[i][j] << " " ;
}
cout << endl ;
}
return 0;
}