正文

魔方问题2005-08-12 20:58:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/billgacsli/3716.html

分享到:

魔方问题 http://www.programfan.com/club/showbbs.asp?id=95170 魔方:每行每列每条对角线之和均相等. 例如:816      357      492  加起来都是15 现在要求打印出1到n平方的自然数构成的魔方阵. 816 357 492 1=A(1,2)  2=A(3,3)  3=A(2,1) 4=A(3,1)  5=A(2,2)  6=A(1,3) 7=A(2,3)  8=A(1,1)  9=A(3,2) 发现规律了吗? 要分三种情形考虑 1.n为奇数 2.n为4的倍数 3.n可写为形如2(n+1)的形式 具体规则可以去找本小学或中学的数学奥赛书看看 http://web.163.sh.cn/~linsoso/d.png ------------------------------------ http://programfan.com/club/showbbs.asp?id=97978 由chdbj发布 魔方阵算法: (1)将1放在第一行中间一列 (2)从2开始直到n*n止个数一次按下列规则存放,每一个数存放的行比前一个数的行数减1,列数加1 (3)如果上一数的行数为1,,则下一个数的行数为n (4)当上一个数的列数为n时,下一个数的列数应为1,行数减1 (5)如果按上面的规则确定的位置上已有数,或上一个数是第一行的n列时,则把下一个数放在上一个数的下面 #include <stdio.h> int main() {   int a[16][16],i,j,k,p,m,n;   p=1;   while(p==1){     printf("输入 n(n=1~15)");     scanf("%d",&n);     if((n!=0)&&(n<=15)&&(n%2!=0))       p=0;   } /*初始化*/   for(i=1;i<=n;i++)     for(j=1;j<=n;j++)       a[i][j]=0;           /*建立魔方阵*/   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; }

阅读(3244) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册