C语言做的魔方阵

2025-03-07 08:17:54
推荐回答(2个)
回答1:

下面是一个打印奇数阶魔方阵的程序:

#include

int main()

{int n=0,i,j,k=1,p,q,a[20][20]={0};

 while(!(n%2))

 {printf("请输入一个小于20的奇数:");

  scanf("%d",&n);

 }

 i=0;

 j=n/2;

 for(p=0;p

 {for(q=0;q

{if(q>0)

{i=(i+n-1)%n;

j=(j+1)%n;

}

a[i][j]=k++;

}

i=(i+1)%n;

 }

 for(i=0;i

 {for(j=0;j

printf("%4d",a[i][j]);

printf("\n");

 }

return 0;

}

回答2:

我奇怪你的语法怎么可能没错,int str[n][n];肯定是编译不通的,数组定义时长度必须是常量。给你一个我自己写的魔方阵算法吧,算作参考
#include
#define N 100
void sort(int *p,int num)
{
int i;
int row,col;
row=0;
i=0;
col=num/2;
while(i {
if(*(p+row*num+col)!=0)
{row+=2;col--;}
*(p+row*num+col)=i+1;
if((row==0)&&(col==num-1))
{
row++;
}
else
{
if(row==0)
row=num-1;
else
row--;
if(col==num-1)
col=0;
else
col++;
}
i++;
}
}
void main()
{
int i,flag,a[N]={0};
int *p,n;
flag=1;
p=a;
while(flag==1)
{
printf("enter n(1~10)\n");
scanf("%d",&n);
if((n>0)&&(n<11)&&(n%2!=0)) flag=0;
}
sort(p,n);
for(i=0;i {
printf("%5d",a[i]);
if((i+1)%n==0) printf("\n");
}
}