14分求助
查看原帖
14分求助
1173895
lifusheng楼主2024/3/29 18:25

我是把题干给的样例画出来然后输入3 3 3结果与样例一样(顺序不同) 我又输入了3 4 5,结果多出来2 6 2、3 5 2、4 4 3、5 3 3,少了5 4 2,求大佬帮助看看问题出在哪里 注意:这代码只能是C语言,C++好像无法运行

#include<stdio.h>
#define N 1025//题干要求1025
void f(int *a[N],int n)
{
	int i,*p[N];
	if(n<4)
		return;
	for(i=1;i<n/2;i++)
	{
		if(a[i][i]==0)
			a[i][i]=4;
		if(a[i][n+1-i]==0)
			a[i][n+1-i]=3;
		if(a[n+1-i][n+1-i]==0)
			a[n+1-i][n+1-i]=1;
		if(a[n+1-i][i]==0)
			a[n+1-i][i]=2;
	}
	for(i=1;i<=n/2;i++)
		p[i]=a[i];
	f(p,n/2);
	for(i=1;i<=n/2;i++)
		p[i]=a[i+n/2];
	f(p,n/2);
	for(i=1;i<=n/2;i++)
		p[i]=a[i]+n/2;
	f(p,n/2);
	for(i=1;i<=n/2;i++)
		p[i]=a[i+n/2]+n/2;
	f(p,n/2);
}
void fun(int *a[N],int x,int y,int n)
{
	int *p[N],i;
	if(n<4)
		return;
	if(x<=n/2 && y<=n/2)
	{
		for(i=0;i<=n/4;i++)
			a[n/2+1-i][n/2+1-i]=1;
		//a[n/4][n/4]=0;
		for(i=1;i<=n/2;i++)
			p[i]=a[i];
		fun(p,x,y,n/2);
	}
	if(x<=n/2 && y>n/2)
	{
		for(i=0;i<=n/4;i++)
			a[n/2-1+i][n/2+1-i]=3;
		//a[3*n/4+1][n/4]=0;
		for(i=1;i<=n/2;i++)
			p[i]=a[i]+n/2;
		fun(p,x,y-n/2,n/2);
	}
	if(x>n/2 && y<=n/2)
	{
		for(i=0;i<=n/4;i++)
			a[n/2+1-i][n/2-1+i]=2;
		//a[n/4][3*n/4+1]=0;
		for(i=1;i<=n/2;i++)
			p[i]=a[n/2+i];
		fun(p,x-n/2,y,n/2);
	}
	if(x>n/2 && y>n/2)
	{
		for(i=0;i<=n/4;i++)
			a[n/2-1+i][n/2-1+i]=4;
		//a[3*n/4+1][3*n/4+1]=0;
		for(i=1;i<=n/2;i++)
			p[i]=a[n/2+i]+n/2;
		fun(p,x-n/2,y-n/2,n/2);
	}
}
int main()
{
	int k,i,j,a[N][N],*p[N],n,x,y;
	scanf("%d",&k);
	for(i=0;i<N;i++)
		p[i]=&a[i];
	for(i=0;i<N;i++)
		for(j=0;j<N;j++)
			a[i][j]=0;
	n=1<<k;
	f(p,n);
	a[n/2][n/2]=0;
	a[n/2+1][n/2+1]=0;
	a[n/2][n/2+1]=0;
	a[n/2+1][n/2]=0;
	scanf("%d%d",&x,&y);
	fun(p,x,y,n);
	a[x][y]=0;
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			if(a[i][j])
				printf("%d %d %d\n",i,j,a[i][j]);
	return 0;
}
2024/3/29 18:25
加载中...