回 帖 发 新 帖 刷新版面

主题:[讨论]帮助

#include   <stdio.h>   
  #define   n   5       /*不同的魔方改这里就行了,当然要是奇数才行*/   
  void   main()   
  {   
        int   a[n][n]={0};   
        int   i,j=0,k=n/2;   
        a[j][k]=1;   
    
        for   (i=1;i<n*n;i++)   
        {   
            j=j+1;   
            k=k-2;   
            if   (j>n-1)   j=0;   
            if   (k<0)   k=k+n;   
            while   (a[j][k]!=0)   
            {   
          k--;   
          if   (k<0)   k+=n;   
            }   
            a[j][k]=i+1;   
        }   
        for   (j=0;j<n;j++)   
        {   
              for   (k=0;k<n;k++)   
              printf("%2d   ",a[j][k]);   
              printf("\n");   
        }   
  }   
帮我改成输出结果为:  8        1    6
                      3        5    7
                      4        9    2

回复列表 (共2个回复)

沙发

把n改成3不就得了……

板凳

k=k-2;   
还是没想明白这里为什么要是2……
    while   (a[j][k]!=0)   
            {   
          k--;   
          if   (k<0)   k+=n;   
            }   
这里也是
看得好晕阿
这个算法我根本就理不清

重新给你说下如何做奇阶幻方吧:
给某一位置赋为1
向当前位置的右上元素填数
如果该位置已经有数,则向当前位置的正下元素填数
直至填满
按这个重写个吧
define出的量还是用大写比较规范

我来回复

您尚未登录,请登录后再回复。点此登录或注册