这道题主要考察分治的知识点:
(你可以使用2维数组)
本题可以使用递归,当正方形长度为零时,跳出void
(代码如下)
#include<bits/stdc++.h>
using namespace std;
int a[1050][1050];
void f(int n,int x,int y){//n表示正方形边长,x,y表示坐标
if(n==0) return;
for(int i=x;i<x+(1<<n-1);i++){
for(int j=y;j<y+(1<<n-1);j++){
a[i][j]=0;
}
}
f(n-1,x+(1<<n-1),y);
f(n-1,x,y+(1<<n-1));
f(n-1,x+(1<<n-1),y+(1<<n-1));
}
int main() {
int n;
cin>>n;
for(int i=0;i<(1<<n);i++){
for(int j=0;j<(1<<n);j++){
a[i][j]=1;
}
}
f(n,0,0);
for(int i=0;i<(1<<n);i++){
for(int j=0;j<(1<<n);j++){
cout<<a[i][j]<<' ';
}cout<<endl;
}
return 0;
}
划重点了:请使用<<函数,不要使用pow函数,因为pow的时间复杂度是O(n)。