奇数幻方

纯手写的

/*

奇数阶幻方最经典的填法是罗伯特法(也有人称之为楼梯方)。填写方法是这样: 把1(或最小的数)放在第一行正中; 按以下规律排列剩下的n*n-1个数: (1)、每一个数放在前一个数的右上一格; (2)、如果这个数所要放的格已经超出了顶行那么就把它放在底行,仍然要放在右一列; (3)、如果这个数所要放的格已经超出了最右列那么就把它放在最左列,仍然要放在上一行; (4)、如果这个数所要放的格已经超出了顶行且超出了最右列,那么就把它放在前一个数的下一行同一列的格内; (5)、如果这个数所要放的格已经有数填入,处理方法同(4)。 这种写法总是先向“右上”的方向,象是在爬楼梯

*/

#include<iostream>

#include<cstdlib>

using namespace std;

#define n 19//定义阶数

int main()

{

int j,i;

int a[n][n];

for(j=0;j<n;j++)//初始化

{

for(i=0;i<n;i++)

{

a[j][i]=0;

}

}

int mid=(1+n)/2-1;

i=0;j=mid;a[i][j]=1;//最上行中间列元素赋值为1;

int flag=0;//flag用来标记右上方元素是否有值

int m,g;

for(int k=1;k<n*n;k++)//赋值次数为n*n-1次

{

m=i;g=j;

i=i-1;j=j+1;

if(i<0)

{

i=i+n;

}

if(j>=n)

{

j=j-n;

}

if(a[i][j]==0)

{

a[i][j]=k+1;

flag=1;

Word文档免费下载Word文档免费下载:奇数幻方 (共2页,当前第1页)

奇数幻方相关文档

最新文档

返回顶部