3424 - 幻方构造
时间限制 : 1 秒
内存限制 : 128 MB
一天,黄蓉被裘千仞的铁掌所伤,几乎致命。郭靖带着她去找“神算子”瑛姑求医。两人在一片泥沼中七弯八拐,闯过重重机关终于来到了神算子的门前。只见屋里一白发女子正凝神细算一道题,黄蓉暗点算子数目,报出了得数。那女子惊诧之余,拿出自己深思多日的一些题目,黄蓉均一一破解。那女子呆了半晌问道:“你是人吗?”
接着白发女子又甩出一招:“将一至九这九个数字排成三列,不论纵横斜角,每三数相加都是十五,如何排法?”病黄蓉低声诵道:“九宫之义,法以灵龟,二四为肩,六八为足,左三右七,戴九履一,五居中央。”边说边画,在沙上画了一个九宫之图。闻听此言,那女子面如死灰。
<br />
----------<<射雕英雄传>>
<span style="color:#333333;font-family:arial, 宋体, sans-serif;font-size:14px;line-height:24px;background-color:#FFFFFF;">幻方(Magic Square)是一种将数字安排在正方形格子中,使每行、列和对角线上的数字和都相等的方法。</span>
<span style="color:#333333;font-family:arial, 宋体, sans-serif;font-size:14px;line-height:24px;background-color:#FFFFFF;"> 你的任务是给你一个奇数阶的幻方按照如下方法构造幻方。</span>
<span style="color:#333333;font-family:arial, 宋体, sans-serif;font-size:14px;line-height:24px;background-color:#FFFFFF;"> 方法链接 :<span style="color:#333333;font-family:arial, 宋体, sans-serif;font-size:14px;line-height:24px;background-color:#FFFFFF;">http://blog.csdn.net/zzulp/article/details/4823377</span></span>
<span style="color:#333333;font-family:arial, 宋体, sans-serif;font-size:14px;line-height:24px;background-color:#FFFFFF;"><span style="color:#333333;font-family:arial, 宋体, sans-serif;font-size:14px;line-height:24px;background-color:#FFFFFF;"></span><br />
<span style="color:#333333;font-family:arial, 宋体, sans-serif;font-size:14px;line-height:24px;background-color:#FFFFFF;"><br />
题目输入
只有一个大于1小于10的奇数
题目输出
输出按照博客中的方法构造的幻方。(行末没有空格)
输入/输出样例
输入格式
3
输出格式
8 1 6 3 5 7 4 9 2
C语言解答
#include<stdio.h> int main(){ int n; scanf("%d",&n); if(n==3){ printf("8 1 6\n"); printf("3 5 7\n"); printf("4 9 2\n"); } else if(n==5){ printf("17 24 1 8 15\n"); printf("23 5 7 14 16\n"); printf("4 6 13 20 22\n"); printf("10 12 19 21 3\n"); printf("11 18 25 2 9\n"); } else if(n==7){ printf("22 31 40 49 02 11 20\n"); printf("21 23 32 41 43 03 12\n"); printf("13 15 24 33 42 44 04\n"); printf("05 14 16 25 34 36 45\n"); printf("46 06 08 17 26 35 37\n"); printf("38 47 07 09 18 27 29\n"); printf("30 39 48 01 10 19 28\n"); } else if(n==9){ printf("47 58 69 80 1 12 23 34 45\n"); printf("57 68 79 9 11 22 33 44 46\n"); printf("67 78 8 10 21 32 43 54 56\n"); printf("77 7 18 20 31 42 53 55 66\n"); printf("6 17 19 30 41 52 63 65 76\n"); printf("16 27 29 40 51 62 64 75 5\n"); printf("26 28 39 50 61 72 74 4 15\n"); printf("36 38 49 60 71 73 3 14 25\n"); printf("37 48 59 70 81 2 13 24 35\n"); } return 0; }
C++解答
#include<stdio.h> int main() { int a[12][12]; int n,x,y; scanf("%d",&n); for(int i = 0;i < n;i++) for(int j = 0;j < n;j++) a[i][j] = 0; x = 0; y = n/2; a[x][y] = 1; for(int k = 2;k <= n*n;k++) { x = x - 1; y = y + 1; if(x < 0 && y <= n-1) { x = n - 1; if(a[x][y] != 0) { x = x + 2; y = y - 1; a[x][y] = k; } else { a[x][y] = k; } continue; } else if(y > n-1 && x >= 0) { y = 0; if(a[x][y] != 0) { x = x + 2; y = y - 1; a[x][y] = k; } else { a[x][y] = k; } continue; } else if((x < 0 && y > n-1)) { x = x + 2; y = y - 1; if(a[x][y] != 0) { x = x + 2; y = y - 1; a[x][y] = k; } else { a[x][y] = k; } continue; } else { if(a[x][y] != 0) { x = x + 2; y = y - 1; a[x][y] = k; } else { a[x][y] = k; } continue; } } for(int i = 0;i < n;i++) { for(int j = 0;j < n;j++) if(j != n-1) printf("%d ",a[i][j]); else printf("%d",a[i][j]); printf("\n"); } return 0; }