用c语言求幻方. 给定任意自然数n>3,要求输出相应的n阶幻方. 如,给定n=7,就输出所有的由1
答案:1 悬赏:20
解决时间 2021-01-17 12:00
- 提问者网友:心牵心
- 2021-01-17 05:14
用c语言求幻方. 给定任意自然数n>3,要求输出相应的n阶幻方. 如,给定n=7,就输出所有的由1
最佳答案
- 二级知识专家网友:第幾種人
- 2021-01-17 05:59
只实现了奇数的情况,其他情况参照百度百科。
#include
#include
#include
void magic(int);
void magic1(int);
void magic4(int);
void magic42(int);
void magic(int n)
{
if(n==1)
{
printf("1
");
return;
}
if(n==2)
{
printf("不存在
");
return;
}
if(n%2==1)
{
magic1(n);
return;
}
else if(n%4==0)
{
magic4(n);
return;
}
else
{
magic42(n);
return;
}
}
void magic1(int n)
{
int **a = (int **)malloc(sizeof(int*)*n);
int i;
int j;
int k;
for(i=0;i {
a[i]=(int *)malloc(sizeof(int)*n);
}
for(i=0; i {
for(j=0; j {
a[i][j]=0;
}
}
//首先确定1的位置,在第一行中间列。
j=n/2;
a[0][j]=1;
for(k=2; k<=n*n; k++)
{
i--;
j++;
//保证行列数的循环。
if(i<0)
{
i=n-1;
}
if(j>n-1)
{
j=0;
}
if(a[i][j]==0)
{
a[i][j]=k;
}
else
{
i=(i+2)%n;
j=(j-1+n)%n;
a[i][j]=k;
}
}
printf("
");
for(i=0; i {
printf(" ");
for(j=0; j {
printf("%d ",a[i][j]);
}
printf("
");
}
for(i=0;i {
free(a[i]);
}
free(a);
return;
}
void magic4(int n)
{
return;
}
void magic42(int n)
{
return;
}
int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
magic(n);
}
}
#include
#include
#include
void magic(int);
void magic1(int);
void magic4(int);
void magic42(int);
void magic(int n)
{
if(n==1)
{
printf("1
");
return;
}
if(n==2)
{
printf("不存在
");
return;
}
if(n%2==1)
{
magic1(n);
return;
}
else if(n%4==0)
{
magic4(n);
return;
}
else
{
magic42(n);
return;
}
}
void magic1(int n)
{
int **a = (int **)malloc(sizeof(int*)*n);
int i;
int j;
int k;
for(i=0;i
a[i]=(int *)malloc(sizeof(int)*n);
}
for(i=0; i
for(j=0; j
a[i][j]=0;
}
}
//首先确定1的位置,在第一行中间列。
j=n/2;
a[0][j]=1;
for(k=2; k<=n*n; k++)
{
i--;
j++;
//保证行列数的循环。
if(i<0)
{
i=n-1;
}
if(j>n-1)
{
j=0;
}
if(a[i][j]==0)
{
a[i][j]=k;
}
else
{
i=(i+2)%n;
j=(j-1+n)%n;
a[i][j]=k;
}
}
printf("
");
for(i=0; i
printf(" ");
for(j=0; j
printf("%d ",a[i][j]);
}
printf("
");
}
for(i=0;i
free(a[i]);
}
free(a);
return;
}
void magic4(int n)
{
return;
}
void magic42(int n)
{
return;
}
int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
magic(n);
}
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯