描述

河图,黑点白点排列奥秘数阵;洛书,纵横斜三条线上数和皆15。这是一个古老的数字游戏,将1~9填入一个九宫格,使得每行、每列、对角线上数字的和都相同(为15)。在西方,满足类似规律的矩阵称之为幻方。 一个n阶的幻方是一个n阶矩阵,在其中填入1~n2个正整数,使得每行每列及两条对角线上的数字和都相同。随着n的增大,幻方的解就越难求。但是,对于n为奇数的幻方,有一种独特的填数解法: 1、首先,将1填在第一行正中间; 2、依次填入2~n2,其中数字i+1填在数字i的右上角; 3、当数字i的右上角不可以填数字时,按如下方法分类讨论: a) 目标格超出幻方右边界,将数字填入该行最左侧的空格中; b) 目标格超出幻方上边界,将数字填入该列最下方的空格中; c) 目标格被占或其他情况,将数字填入源数字的下方一格。 下各图给出了三阶幻方的填数流程:

现在,请你按照上述规则,求解幻方。

输入

第一行包含一个正整数T (1≤T≤10),表示有T组数据。 接下来T行,每行包含一个正整数N(1≤N<1000),表示幻方的阶数。 数据保证N一定为奇数。

输出

对于每个N阶幻方,依次输出N行,每行N个数字,每两个数字间用空格分隔。

样例输入

2

1

3

样例输出

1

8 1 6

3 5 7

4 9 2

#include<iostream>
using namespace std;
int main()
{
int t,n,i,j;
int **a;
cin>>t;
while(t--)
{
cin>>n;
a=(int **)malloc(sizeof(int *)*(n+3));
for(i=-1;i<=n;i++)
a[i]=(int *)malloc(sizeof(int)*(n+3));
for(i=-1;i<=n;i++)
for(j=-1;j<=n;j++)
a[i][j]=0;
i=0,j=n/2;
a[i][j]=1;
for(int k=2;k<=n*n;k++)
{
i--;j++;
if(i>=0&&i<n&&j>=0&&j<n&&a[i][j]==0) a[i][j]=k;
else if(i<0&&j>=0&&j<n)
{
i=n-1;
while(a[i][j]!=0)
i--;
a[i][j]=k;
}
else if(j>n-1&&i>=0&&i<n)
{
j=0;
while(a[i][j]!=0)
j++;
a[i][j]=k;
}
else if(a[i][j]!=0||i<0&&j>n-1)
{
i=i+2;j--;
while(a[i][j]!=0)
i++;
a[i][j]=k;
}
} for(i=0;i<n;i++)
{
for(j=0;j<n-1;j++)
cout<<a[i][j]<<" ";
cout<<a[i][n-1];
cout<<endl;
} }
delete []a;
return 0;
}

  

1990-D. 幻方的更多相关文章

  1. [NOIP2015] 提高组 洛谷P2615 神奇的幻方

    题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. ...

  2. 任意阶幻方(魔方矩阵)C语言实现

    魔方又称幻方.纵横图.九宫图,最早记录于我国古代的洛书.据说夏禹治水时,河南洛阳附近的大河里浮出了一只乌龟,背上有一个很奇怪的图形,古人认为是一种祥瑞,预示着洪水将被夏禹王彻底制服.后人称之为&quo ...

  3. 【C】——幻方算法

    一.幻方按照阶数可分成了三类,即奇数阶幻方.双偶阶幻方.单偶阶幻方. 二.奇数阶幻方(劳伯法) 奇数阶幻方最经典的填法是罗伯法.填写的方法是: 把1(或最小的数)放在第一行正中:按以下规律排列剩下的( ...

  4. AC日记——神奇的幻方 洛谷 P2615(大模拟)

    题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. ...

  5. 任意阶魔方阵(幻方)的算法及C语言实现

    写于2012.10: 本来这是谭浩强那本<C程序设计(第四版)>的一道课后习题,刚开始做得时候去网上找最优的算法,结果发现奇数和双偶数(4的倍数)的情况下算法都比较简单,但是单偶数(2的倍 ...

  6. Java 实现任意N阶幻方的构造

    一.关于单偶数阶幻方和双偶数阶幻方 (一)单偶数阶幻方(即当n=4k+2时) 任何4k+2 阶幻方都可由2k+1阶幻方与2×2方块复合而成,6是此类型的最小阶. 以6阶为例,可由3阶幻方与由0,1,2 ...

  7. Java 实现奇数阶幻方的构造

    一.设计的流程图如下所示 二.Java 语言的代码实现 package MagicSquare; //奇数幻方的实现 public class Magic_Odd { //n 为幻方的阶数 publi ...

  8. 听说noip2015有幻方

    终于可以说一句:pascal大法好了 magic.pp是写好的算幻方哦…… 虽然这种水题大家都会,也没什么卵用……

  9. noip2015day1 T1 4510 神奇的幻方

    4510 神奇的幻方 noip2015day1 T1  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Descripti ...

  10. NOIP 2015普及组复赛Day1 T1 == Codevs4510 神奇的幻方

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold  题目描述 Description: 幻方是一种很神奇的N∗N矩阵:它由数字 1,2,3, … … ,N∗N构成, ...

随机推荐

  1. NDIS IM 驱动那些事情

    最近不知道为什么开始学习windows NDIS驱动开发,用的是寒江独钓的例子,其实他的改的代码也就一点点,说的有用的东西也就那么多,不过还是感谢他出了这么一本书,不然这真的就没有一本稍微好一点的书籍 ...

  2. UIView中常见的方法总结

    addSubview: 添加一个子视图到接收者并让它在最上面显示出来.- (void)addSubview:(UIView *)view[讨论]这方法同样设置了接收者为下一个视图响应对象.接收者保留视 ...

  3. OC4_电子词典

    // // MyDictionary.h // OC4_电子词典 // // Created by zhangxueming on 15/6/15. // Copyright (c) 2015年 zh ...

  4. 【Leetcode】357. Count Numbers with Unique Digits

    题目描述: Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10n. ...

  5. ArcSDE for oracle10g安装后post的时候出现错误

    The Post Installation Setup can not locate required Oracle files in your path.Check your Oracle inst ...

  6. flex_播放视频_本地_与_FMS端

    <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...

  7. 修改SSH端口为21

    在交流群里面有一位兄弟问到能否将ssh端口号修改为21端口,后来经过测试可以设置,具体步骤如下: 一.修改ssh配置文件的默认端口 #vim /etc/ssh/sshd_config 找到#port ...

  8. rpm与yum命令的初步认识

    RPM:Red Hat package manager(RedHat软件包管理工具),现在为RPM is Package Manager好比windows里的文件扩展名为·exe的软件包. RPM的包 ...

  9. JQuery 预热

    这是第一次在博客园写随笔,之所以有这样的冲动是因为每次看到很多园友不断的发表文章,记录下自己的点点滴滴,内心就在不断的忏悔,我很敬佩这种人,不管他们表达的东西是初级还是精辟,我认为只要去坚持写了就是一 ...

  10. mongodb 级联操作查询时,关联条件

    ObjectId id=new ObjectId("123"); c=c.where("relation_type.$id").is(id);