题目
现有2n×2n(n≤10) 名作弊者站成一个正方形方阵等候kkksc03的发落。kkksc03决定赦免一些作弊者。他将正方形矩阵均分为4个更小的正方形矩阵,每个更小的矩阵的边长是原矩阵的一半。其中左上角那一个矩阵的所有作弊者都将得到赦免,剩下3个小矩阵中,每一个矩阵继续分为4个更小的矩阵,然后通过同样的方式赦免作弊者……直到矩阵无法再分下去为止。所有没有被赦免的作弊者都将被处以棕名处罚。
给出n,请输出每名作弊者的命运,其中0代表被赦免,1代表不被赦免。
输入输出格式
输入格式
一个整数n。
输出格式
的 01 矩阵,代表每个人是否被赦免。数字之间有一个空格。
输入输出样例
输入样例
3
输出样例
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 1
0 0 0 0 0 1 0 1
0 0 0 0 1 1 1 1
0 0 0 1 0 0 0 1
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
1 1 1 1 1 1 1 1
代码
//经典的递归套路的代码,遇到反复相同的操作过程,使用递归
#include
using namespace std;
int n,a[1050][1050],p=1;
void bianhua(int x,int l,int h){//x为正方形边长,l、h分别为递归正方形的横纵坐标
if(x==2){//终止条件
a[l][h]=0;
return;
}
//具体操作
for(int i=l;i<=l+x/2-1;i++){
for(int j=h;j<=h+x/2-1;j++){
a[i][j]=0;
}
}
//其余部分操作完成
bianhua(x/2,l,h+x/2);
bianhua(x/2,l+x/2,h);
bianhua(x/2,l+x/2,h+x/2);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
p*=2;
}
for(int i=1;i<=p;i++){
for(int j=1;j<=p;j++){
a[i][j]=1;
}
}
bianhua(p,1,1);//递归
for(int i=1;i<=p;i++){
for(int j=1;j<=p-1;j++){
cout<