描述

河图,黑点白点排列奥秘数阵;洛书,纵横斜三条线上数和皆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. c# 简单的通用基础字典

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using Alif.Ali ...

  2. day 0.

    /* 嗯 就要结束了. OI生涯 2015.12-2016.11. 认识了很多人. 然后我这个学渣跟你们混在一起 感觉自卑至极啊. 好了 先不说这些伤心的话. Gryz小伙伴儿们NOIP RP++吧. ...

  3. Visual Studio通过Web Deploy发布网站报错:An error occurred when the request was processed on the remote computer.

    这个问题很奇怪,不管我怎么重启服务器和自己的开发机,都没有用. 在网上找了很多资料,有说可以尝试去读Windows的错误日志,然后通过日志找原因…(详见Stackoverflow:http://sta ...

  4. Kubernetes Architecture

    reference:https://www.symantec.com/connect/blogs/google-kubernetes-analytical-evaluation

  5. present的时候是可以直接回到第一个viewcon的

    最新:我并没有记错,是可以直接回到的 [self.presentingViewController.presentingViewController dismissModalViewControlle ...

  6. ubuntu安装QQ目前最完善的方法!(亲测,成功)

    wine qq 2012 for linux Ubuntu 64位兼容(12月21日末日版) 由 smile » 2011-04-07 9:08 +-------------------------- ...

  7. Python时间和日期学习

    #coding=utf-8 __author__ = 'Administrator' #日期和时间模块学习 """ Python程序能用很多方式处理日期和时间,转换日期格 ...

  8. Jqplot在joomla组件中的应用

    (1)在com_collect组件中采用的是ajax获取json类型的值.[http://www.jqplot.com/tests/data-renderers.php]这上边有实例. (2)在jqp ...

  9. Xubuntu 安装mentohust

    对于路由器上网到用户来说,自动分配IP上网。 对于校园网用户,首先下载mentohust_0.3.4-1_i386.deb,双击安装程序 然后在命令窗口中输入sudo -s 密码:user来获得roo ...

  10. 地形图比例尺、等高距和DEM分辨率关系

    地表面的形态是很复杂的,不同地貌类型的形态是由它的相对高度、地面坡度以及所处的地势所决定的,它们是影响等高距的主要因素。从等高距计算公式可以看出,当地图比例尺和图上等高线间的最小距离简称等高线间距确定 ...