C语言——输出“魔方阵”
C语言——输出“魔方阵”
算法实现:
本程序要输出魔方阵,魔方阵如下:
1) 8 1 6 2) 17 24 1 8 15
3 5 7 23 5 7 14 16
4 9 2 4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
了解题可知:
1.第一行中间一列的值为1。
所以用j=n/2+1确定1的列数,得出a[1][j]=1。
2.每一个数存放的行比前一个数的行数减1,列数加1。
行数用i=i-1确定,列数用j=j+1确定。
3.如果一个数行数为第一行,则下一个数行数为最后一行。
4.如果一个列行数为最后一列,则下一个数列数为第一列。
5.如果按上面的规则确定的位置上已有数,或上一个数是第一行最后一列,则把下一个数放在上一个数的下面。
程序:
#include <stdio.h>
#define N 16
int main()
{
int a[N][N]={0},i,j,k,p,n;
p=1;
while(p==1)
{
printf("Enter n(1~%d): ",N);
scanf("%d",&n);
if((n!=0)&&(n<N)&&(n%2!=0))
p=0;
}
i=n+1;
j=n/2+1;
a[1][j]=1;
for(k=2;k<=n*n;k++)
{
i=i-1;
j=j+1;
if((i<1)&&(j>n))
{
i=i+2;
j=j-1;
}
else
{
if(i<1) i=n;
if(j>n) j=1;
}
if(a[i][j]==0) a[i][j]=k;
else
{
i=i+2;
j=j-1;
a[i][j]=k;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
return 0;
}
总结:
作为初学编程的第一个程序,总感觉有些低级,没什么技术性,不过还是学到了新的知识。相信经过之后的学习,我会懂得更多,会敲出有技术含量的代码。