1990-D. 幻方
描述
河图,黑点白点排列奥秘数阵;洛书,纵横斜三条线上数和皆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. 幻方的更多相关文章
- [NOIP2015] 提高组 洛谷P2615 神奇的幻方
题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. ...
- 任意阶幻方(魔方矩阵)C语言实现
魔方又称幻方.纵横图.九宫图,最早记录于我国古代的洛书.据说夏禹治水时,河南洛阳附近的大河里浮出了一只乌龟,背上有一个很奇怪的图形,古人认为是一种祥瑞,预示着洪水将被夏禹王彻底制服.后人称之为&quo ...
- 【C】——幻方算法
一.幻方按照阶数可分成了三类,即奇数阶幻方.双偶阶幻方.单偶阶幻方. 二.奇数阶幻方(劳伯法) 奇数阶幻方最经典的填法是罗伯法.填写的方法是: 把1(或最小的数)放在第一行正中:按以下规律排列剩下的( ...
- AC日记——神奇的幻方 洛谷 P2615(大模拟)
题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. ...
- 任意阶魔方阵(幻方)的算法及C语言实现
写于2012.10: 本来这是谭浩强那本<C程序设计(第四版)>的一道课后习题,刚开始做得时候去网上找最优的算法,结果发现奇数和双偶数(4的倍数)的情况下算法都比较简单,但是单偶数(2的倍 ...
- Java 实现任意N阶幻方的构造
一.关于单偶数阶幻方和双偶数阶幻方 (一)单偶数阶幻方(即当n=4k+2时) 任何4k+2 阶幻方都可由2k+1阶幻方与2×2方块复合而成,6是此类型的最小阶. 以6阶为例,可由3阶幻方与由0,1,2 ...
- Java 实现奇数阶幻方的构造
一.设计的流程图如下所示 二.Java 语言的代码实现 package MagicSquare; //奇数幻方的实现 public class Magic_Odd { //n 为幻方的阶数 publi ...
- 听说noip2015有幻方
终于可以说一句:pascal大法好了 magic.pp是写好的算幻方哦…… 虽然这种水题大家都会,也没什么卵用……
- noip2015day1 T1 4510 神奇的幻方
4510 神奇的幻方 noip2015day1 T1 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Descripti ...
- NOIP 2015普及组复赛Day1 T1 == Codevs4510 神奇的幻方
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description: 幻方是一种很神奇的N∗N矩阵:它由数字 1,2,3, … … ,N∗N构成, ...
随机推荐
- Word 2003 出现 向程序发送命令时出现问题 的 解决方案
这种原因出现的问题是word的模板出现问题. 解决方案是重新让word生成Norma.dot文档. 步骤: 1,按住视窗键+R或者开始菜单搜索文件和程序,粘贴 %appdata%\microsoft\ ...
- 老老实实学习WCF[第二篇] 配置wcf
老老实实学WCF 第二篇 配置WCF 在上一篇中,我们在一个控制台应用程序中编写了一个简单的WCF服务并承载了它.先回顾一下服务端的代码: using System; using System.Col ...
- GDI+
1, 编译error的话一般是却 #include <comdef.h>#include <Windows.h> Windows.h内会包含Windows.h,但是因为在std ...
- Poj OpenJudge 百练 Bailian 1008 Maya Calendar
1.Link: http://poj.org/problem?id=1008 http://bailian.openjudge.cn/practice/1008/ 2.content: Maya Ca ...
- GC日志补充
根据日志,确实发生了FullGC,计算资源被耗光 Java HotSpot(TM) 64-Bit Server VM (24.79-b02) for windows-amd64 JRE (1.7.0_ ...
- Android Animation ---TranslateAnimation
if(stopBtn.getVisibility()==View.VISIBLE){ Animation animation_stop = new TranslateAnimation( Animat ...
- 深度优先算法DFS
英雄要从H点出发,去解救位于M点的美女. 迷宫的围墙用#表示,带*号的位置表示有杀手埋伏,这些点都是不能走的, 那么英雄要最少走多少步才能解救美女呢? package myalgorithm; imp ...
- gridview 字段没有绑定由于column visible= false
由于gridview column visible=false, 后面执行gridview databound()操作 不会将数据绑定到相关的单元格,其实这个时候我们希望绑定数据只是不显示而已. 可以 ...
- CCNP第三天 EIGRP综合实验
实验题如图所示:其中R2连R3 R5为快速以太网线,其他均为串线,帧中继默认是富曼斯(全连网状结构),即所有接入的路由之间的PVC都已经打通,所有 要关闭R5和R8的逆向arp功能,来手工配置R5到 ...
- ARM-Linux S5PV210 UART驱动(6)----platform device的添加
开发板是飞凌OK210 arch/arm/mach-s5pv210/mach-smdkc110.c 首先是UART的寄存器默认配置信息: /* Following are default values ...