我是把题干给的样例画出来然后输入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;
}