1. 程式人生 > 實用技巧 >「洛谷 P5461」赦免戰俘

「洛谷 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; }