社区讨论

求调试代码

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 条回复,欢迎继续交流。

正在加载回复...