社区讨论
求调试代码
P5461赦免战俘参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lp711u15
- 此快照首次捕获于
- 2023/11/20 22:53 2 年前
- 此快照最后确认于
- 2023/11/21 13:24 2 年前
CPP
void kil(int x,int y,int wx,int wy){
if(x>n||y>n||wx>n||wy>n)return;
for(int i=x;i<=wx;i++)
for(int j=y;j<=wy;j++)a[i][j]=0;
// cout <<"第"<<x<<"行第"<<y<<"列至第"<<wx<<"行第"<<wy<<"列区域清空\n";
//Sleep(100);
}
void pus(int x,int y,int wilx,int wily){
if(x>n||y>n)return;
int l=(wilx-x+wily-y)/2;
kil(x,y,x+l,y+l);//左上角 清空
pus(x+l,y,x+2*l,y+l);//左下角
pus(x,y+l,x+l,y+2*l);//右上角
pus(x+l,y+l,x+2*l,y+2*l);//右下角
}
// 1 2 3 4
//1 0 0 0 1
//2 0 0 1 1
//
//3 0 1 0 1
//4 1 1 1 1
kil函数表示清空从x行y列至wx行wy列的正方形区域
pus函数用于将区域分作4份,清空左上角的人(赦免)
然后继续分3个部分计算,但是出了问题
无论如何输出都是全0,完整代码如下:
CPP#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
int a[1200][1200],n;
void kil(int x,int y,int wx,int wy){
if(x>n||y>n||wx>n||wy>n)return;
for(int i=x;i<=wx;i++)
for(int j=y;j<=wy;j++)a[i][j]=0;
// cout <<"第"<<x<<"行第"<<y<<"列至第"<<wx<<"行第"<<wy<<"列区域清空\n";
//Sleep(100);
}
void pus(int x,int y,int wilx,int wily){
if(x>n||y>n)return;
int l=(wilx-x+wily-y)/2;
kil(x,y,x+l,y+l);//左上角 清空
pus(x+l,y,x+2*l,y+l);//左下角
pus(x,y+l,x+l,y+2*l);//右上角
pus(x+l,y+l,x+2*l,y+2*l);//右下角
}
// 1 2 3 4
//1 0 0 0 1
//2 0 0 1 1
//
//3 0 1 0 1
//4 1 1 1 1
int main(){
cin>>n;
n=pow(2,n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)a[i][j]=1;
pus(1,1,n/2,n/2);//标记
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)cout <<a[i][j]<<" ";
cout <<endl;
}
return 0;
}
注释的是调试代码,输出混乱,一个个处理后确实全空
所以感觉是pus函数分部分的步骤有问题
故发此贴,求帮助
回复
共 0 条回复,欢迎继续交流。
正在加载回复...