1 奇数阶幻方构造法

(1) 将1放在第一行中间一列;

(2) 从2开始直到n×n止各数依次按下列规则存放:按 45°方向行走,向右上,即每一个数存放的行比前一个数的行数减1,列数加1

(3) 如果行列范围超出矩阵范围,则回绕。例如1在第1行,则2应放在最下一行,列数同样加1;

(4) 如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<stdio.h>
#include<stdlib.h>
#include<queue>
#include<math.h>
#include<map>
#define INF 0xffffffff
#define MAX 1005
#define Temp 1000000000
#define MOD 1000000007 using namespace std; int Map[MAX][MAX]; void MagicSquare(int n)
{
Map[][(n+)/]=;//首先填第一行中间列 1
int x=,y=(n+)/;
for(int i=;i<=n*n;i++)
{
if(x== && y==n)//若当前位置为(1,n)则下一个数填到当前数字下方
{
x=x+;
y=y;
Map[x][y]=i;
continue;
}
if(y==n)//若超出边界则回绕
{
if(Map[x-][]==-)
{
x=x-;
y=;
Map[x][y]=i;
}
else
{
x=x+;
Map[x][y]=i;
}
continue;
}
if(x==)//若超出边界则回绕
{
if(Map[n][y+]==-)
{
x=n;
y=y+;
Map[x][y]=i;
}
else
{
x=x+;
Map[x][y]=i;
}
continue;
}
else//向右上方填
{
if(Map[x-][y+]!=-)//若右上方已有数字,当前数字填当前位置下方
{
x=x+;
y=y;
Map[x][y]=i;
}
else
{
x=x-;
y=y+;
Map[x][y]=i;
}
continue;
}
}
} int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
memset(Map,-,sizeof(Map));
MagicSquare(n);
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
printf("%d%c",Map[i][j],j==n?'\n':' ');
}
}
}
return ;
}

最新文章

  1. category中重写方法?
  2. 扩展jquery的选择器
  3. [bzoj4551][Tjoi2016][Heoi2016]树
  4. Java:集合工具类-Collections
  5. [原创]java WEB学习笔记57:Struts2学习之路---ActionSupport类的说明
  6. codeforces 258C Little Elephant and LCM 组合数学 枚举
  7. juce viewport使用
  8. MSSQL、C# 、Winform、ASP.NET - 数据库备份与还原模块
  9. [置顶] vs2008 编译adb 支持4.2 android 系统(增加push 命令的进度)
  10. java连接ms sql server各类问题解析
  11. spring-mvc报红错误
  12. J.U.C-三剑客[semaphore\CyclicBarrier\CountDownLatch]
  13. Spark配置参数详解
  14. 自动化单元测试工具 EvoSuite 的简单使用 【转载】
  15. BZOJ - 3676 回文串 (回文树)
  16. 大型运输行业实战_day11_1_aop理论与aop实际业务操作
  17. JavaScript常用操作,常用类
  18. Mysql binlog二进制日志
  19. php学习七:时间和日期
  20. (转)Javascript模块化编程(三):Require.js的用法

热门文章

  1. MongoDB索引(一)
  2. Marble 绘制线
  3. Openjudge-计算概论(A)-能被3,5,7整除的数
  4. 【Linux】zookeeper构造伪集群
  5. poj1256(全排列stl)
  6. mnesia
  7. great C++ socket library
  8. img转data
  9. linux zeromq
  10. 个人项目中的WCF使用