在《射雕英雄传》中黄蓉曾破解九宫格,口诀:戴九履一,左三右七,二四有肩,八六为足,五居中央。
有口诀的!!
一居上行正中央,依次斜填莫相忘,上出框时向下放,右出框时向左放,排重编在下格放,右上排重一个样。
「重排九宫」有两种玩法:
第一种是在在3×3方格盘上,是把1至8八个小木块随意摆放,每一空格其周围的数字可移至空格。玩者要将小木块按12345678的顺序重新排好,以最少的移动次数拼出结果者为胜。
第二种玩法如九宫格算术游戏玩法,推动木格中8个数字排列,横竖都有3个格,使每行、每列两个对角线上的三数之和都等于15。在计算的同时,还必须思考怎么把数字方块推动到相对应的位置上,这个游戏不仅仅考验人的数字推理能力,也同时考验了人的思维逻辑能力。
针对奇数阶数的幻方填写方法:
注意:二维数组指针的创建和释放。
#include<iostream>
#include<cstring>
#include<iomanip>
using namespace std;
int main()
{
int n;
cin>>n;
cout<<endl;
int **a=new int*[n];
for(int i=0;i<n;i++)
{
a[i]=new int [n];
memset(a[i],0,n*sizeof(int));
}
int r=0;
int l=n/2;
for(int i=1;i<=n*n;i++)
{
a[r][l]=i;
r--;
l++;
if(r<0&&l>=n)
{
r+=2;
l--;
}
else if(r<0)
{
r=n-1;
}
else if(l>=n)
{
l=0;
}
else if(a[r][l]!=0)
{
l--;
r+=2;
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cout<<setw(4)<<a[i][j];
}
cout<<endl;
}
for(int i=n;i>0;)
{
delete[] a[--i];
}
delete[] a;
return 0;
}