「洛谷 P5461」赦免战俘
首先这道题就是一道对我来说很难的膜你+递归题
具体做法就是先预处理一下数组,所有都赋值成1,然后算一下2n 也就是正方形初始边长,再搞一个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; }
关于我,一个退役彩笔OIer,可能以后会在这个博客上更一些生活向的东西吧

浙公网安备 33010602011771号