C语言做的魔方阵
发布网友
发布时间:2022-05-27 16:43
我来回答
共2个回答
热心网友
时间:2023-11-04 12:44
下面是一个打印奇数阶魔方阵的程序:
#include<stdio.h>
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<n;p++)
{for(q=0;q<n;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<n;i++)
{for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
return 0;
}
热心网友
时间:2023-11-04 12:45
我奇怪你的语法怎么可能没错,int str[n][n];肯定是编译不通的,数组定义时长度必须是常量。给你一个我自己写的魔方阵算法吧,算作参考
#include<stdio.h>
#define N 100
void sort(int *p,int num)
{
int i;
int row,col;
row=0;
i=0;
col=num/2;
while(i<num*num)
{
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<n*n;i++)
{
printf("%5d",a[i]);
if((i+1)%n==0) printf("\n");
}
}