「洛谷 P5461」赦免戰俘
阿新 • • 發佈:2020-07-23
首先這道題就是一道對我來說很難的膜你+遞迴題
具體做法就是先預處理一下陣列,所有都賦值成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; } voiddg(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; }