求大神帮我设计一个5阶魔方方阵.用C语言 不要C++
来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/05/21 18:03:07
求大神帮我设计一个5阶魔方方阵.用C语言 不要C++
输出如下 17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9 运行出来就是这个
输出如下 17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9 运行出来就是这个
你想求5的话 输入5就行了 会显示输出5阶以下的魔方阵 #include<stdio.h>
void main()
{
int i,j,k,m,n;
int a[20][20];
printf("please input the m:");
scanf("%d",&m);
for(n=3;n<=m;n++)
{
if(n%2!=0)
{
printf("%4d阶魔方阵如下:\n",n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
a[i][j]=0;
j=n/2;
a[0][j]=1;
for(k=2;k<=n*n;k++)
{
i--;
j++;
if(i<0)
i=n-1;
else 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("\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n\n");
}
}
}
}
调试运行吧!
再问: 可以运行的时候不用输入直接显示5的吗??
再答: 这个是我以前设计的代码 是输入17就是显示17阶以下的奇数魔方阵,如果你要改成直接显示5阶的话 吧循环去掉就行了
再问: = = 循环代码在哪里
再答: #include<stdio.h>void main(){ int i,j,k,m,n; int a[20][20]; printf("please input the n:"); scanf("%d",&n);//这里改成你想要输出的阶数,输入5就行了 //for(n=3;n<=m;n++) 去掉这里的循环 printf("%4d阶魔方阵如下:\n",n); for(i=0;i<n;i++) for(j=0;j<n;j++) a[i][j]=0; j=n/2; a[0][j]=1; for(k=2;k<=n*n;k++) { i--; j++; if(i<0) i=n-1; else 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("\n"); for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("%4d",a[i][j]); printf("\n\n"); } }
void main()
{
int i,j,k,m,n;
int a[20][20];
printf("please input the m:");
scanf("%d",&m);
for(n=3;n<=m;n++)
{
if(n%2!=0)
{
printf("%4d阶魔方阵如下:\n",n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
a[i][j]=0;
j=n/2;
a[0][j]=1;
for(k=2;k<=n*n;k++)
{
i--;
j++;
if(i<0)
i=n-1;
else 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("\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n\n");
}
}
}
}
调试运行吧!
再问: 可以运行的时候不用输入直接显示5的吗??
再答: 这个是我以前设计的代码 是输入17就是显示17阶以下的奇数魔方阵,如果你要改成直接显示5阶的话 吧循环去掉就行了
再问: = = 循环代码在哪里
再答: #include<stdio.h>void main(){ int i,j,k,m,n; int a[20][20]; printf("please input the n:"); scanf("%d",&n);//这里改成你想要输出的阶数,输入5就行了 //for(n=3;n<=m;n++) 去掉这里的循环 printf("%4d阶魔方阵如下:\n",n); for(i=0;i<n;i++) for(j=0;j<n;j++) a[i][j]=0; j=n/2; a[0][j]=1; for(k=2;k<=n*n;k++) { i--; j++; if(i<0) i=n-1; else 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("\n"); for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("%4d",a[i][j]); printf("\n\n"); } }