1
2
3

「洛谷 P5461」赦免战俘

首先这道题就是一道对我来说很难膜你+递归

具体做法就是先预处理一下数组,所有都赋值成1,然后算一下2也就是正方形初始边长,再搞一个void类型的函数,再搞3个参数:当时正方形的边长、横坐标、纵坐标 ,判断x是否=2(也就是递归是否要继续),然后把左上角那一堆赋值成0,然后再调用另外三个正方形的函数

代码如下

#include<iostream>
using namespace std;
int a[1025][1025];
int pow(int n){
    if(n>1) return 2*pow(n-1);
    if(n==1) return 2;
}
void dg(int x,int y,int z)
{
    if(x==2)
    {
        a[y][z]=0;
        return; 
    }
    for(int i=y;i<=y+x/2-1;i++)
      for(int j=z;j<=z+x/2-1;j++)a[i][j]=0;
    dg(x/2,y+x/2,z);
    dg(x/2,y,z+x/2);
    dg(x/2,y+x/2,z+x/2);
}
int main()
{
    int n;
    cin>>n;
    n=pow(n);
    for(int i=1;i<=n;i++)
      for(int j=1;j<=n;j++)a[i][j]=1;
    dg(n,1,1);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++)cout<<a[i][j]<<" ";
        cout<<endl;
    }
    return 0;
}

 

posted @ 2020-07-23 21:12  OIerZhiyang  阅读(221)  评论(6)    收藏  举报