首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >任意阶幻方..

任意阶幻方..

作者头像
Gxjun
发布2018-03-22 12:41:28
4690
发布2018-03-22 12:41:28
举报
文章被收录于专栏:mlml
  1 /*@coder Gxjun*/
  2 #include<stdio.h>
  3 #include<string.h>
  4 #include<stdlib.h>
  5 #define maxn 100
  6 int map[maxn][maxn] ;
  7 void creat_magic(int n,int x,int y ,int sn)   //奇阶幻方构造
  8 {
  9     int i,j,k;
 10     i=0;
 11     j=n/2;
 12     for(k=n;k<=n*n;k++)
 13     {
 14         map[i+x][j+y]=k+sn;
 15         if(k%n!=0)
 16         {
 17             if(i!=0)  i--;
 18             else      i=n-1;
 19             if(n==j+1) j=0;
 20             else      j++;
 21         }
 22         else
 23         {
 24             if(i==n-1)i=0;
 25             else    i++;
 26         }
 27     }
 28 }
 29 
 30 void  magic_4(int n)
 31 {
 32     int i,j;
 33     for(i=0 ; i<n ;i++)
 34     {
 35         for(j=0 ; j<n ;j++)
 36         {
 37             if((i%4==0||i%4==3)&&(j%4==0||j%4==3)||(i%4==1||i%4==2)&&(j%4==1||j%4==2))
 38             {
 39                 map[i][j]=n*n-(i*n+j);
 40             }
 41             else
 42             {
 43                 map[i][j]=i*n+j+1;   //i*n+j+n
 44             }
 45         }
 46     }
 47 }
 48 
 49 void magic_other(int n)
 50 {
 51     int i,j,t;
 52     creat_magic(n/2,0,0,0);
 53     creat_magic(n/2,n/2,n/2,n*n/4);
 54     creat_magic(n/2,0,n/2,n*n/2);
 55     creat_magic(n/2,n/2,0,n*n/4);
 56     for(i=0;i<n/2;i++)
 57     {
 58         for(j=0;j<n/4;j++)
 59         {
 60             if(i!=n/4||j!=0)
 61             {
 62                 /*<swap>*/
 63                 t=map[i][j];
 64                 map[i][j]=map[i+n/2][j];
 65                 map[i+n/2][j]=t;
 66             }
 67         }
 68     }
 69             t=map[n/4][n/4];
 70             map[n/4][n/4]=map[n/4+n/2][n/4];
 71             map[n/4+n/2][n/4]=t;
 72         for(i=0;i<n/2;i++)
 73         {
 74             for(j=n-n/4+1 ;j<n;j++)
 75             {
 76                 t=map[i][j];
 77                 map[i][j]=map[i+n/2][j];
 78                 map[i+n/2][j]=t;
 79             }
 80         }
 81 }
 82 int main()
 83 {
 84     int n,i,j;
 85     while(scanf("%d",&n)!=EOF)
 86     {
 87         memset(map,0,sizeof(map));
 88         if(n&1) creat_magic(n,0,0,0);
 89         else if(n%4==0)    magic_4(n);
 90         else magic_other(n);
 91         for(i=0;i<n;i++)
 92         {
 93             for(j=0;j<n;j++)
 94             {
 95                 printf("%d ",map[i][j]);
 96             }
 97             putchar(10);
 98         }
 99     }
100     return 0;
101 }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-03-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档