所谓“幻方”就是一个n*n 的矩形,在这个矩形中有规律的填入数值为 1—n2个数字,并且满足它的行,列,对角线的和相等.输入奇数n,输出n阶的奇数幻方

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/24 07:59:55
所谓“幻方”就是一个n*n 的矩形,在这个矩形中有规律的填入数值为 1—n2个数字,并且满足它的行,列,对角线的和相等.输入奇数n,输出n阶的奇数幻方

所谓“幻方”就是一个n*n 的矩形,在这个矩形中有规律的填入数值为 1—n2个数字,并且满足它的行,列,对角线的和相等.输入奇数n,输出n阶的奇数幻方
所谓“幻方”就是一个n*n 的矩形,在这个矩形中有规律的填入数值为 1—n2个数字,并且满足它的行,列,对角线的和相等.
输入奇数n,输出n阶的奇数幻方

所谓“幻方”就是一个n*n 的矩形,在这个矩形中有规律的填入数值为 1—n2个数字,并且满足它的行,列,对角线的和相等.输入奇数n,输出n阶的奇数幻方
用楼梯法最快.
奇数阶幻方最经典的填法是罗伯特法(也有人称之为楼梯方).填写方法是这样:
把1(或最小的数)放在第一行正中; 按以下规律排列剩下的n*n-1个数:
(1)、每一个数放在前一个数的右上一格;
(2)、如果这个数所要放的格已经超出了顶行那么就把它放在底行,仍然要放在右一列;
(3)、如果这个数所要放的格已经超出了最右列那么就把它放在最左列,仍然要放在上一行;
(4)、如果这个数所要放的格已经超出了顶行且超出了最右列,那么就把它放在前一个数的下一行同一列的格内;
(5)、如果这个数所要放的格已经有数填入,处理方法同(4).
这种写法总是先向“右上”的方向,象是在爬楼梯.
需讨论,可以百度嗨我.
有几种方法:
(1)当n为奇数时,我们称幻方为奇阶幻方.可以用Merzirac法与loubere法实现,根据我的研究,发现用国际象棋之马步也可构造出更为神奇的奇幻方,故命名为horse法.
horse法生成奇阶幻方 先在任意一格内放入1.向左走1步,并下走2步放入2(称为马步),向左走1步,并下走2步放入3,依次类推放到n.在n的下方放入n+1(称为跳步),再按上述方法放置到2n,在2n的下边放入2n+1.
(2)Merzirac法生成奇阶幻方 在第一行居中的方格内放1,依次向右上方填入2、3、4…,如果右上方已有数字,则向下移一格继续填写.
(3)loubere法生成奇阶幻方 在居中的方格向上一格内放1,依次向右上方填入2、3、4…,如果右上方已有数字,则向上移二格继续填写.
(4)罗伯法:
1居上行正中央,仿次斜填莫相忘,上出框时往下填,
右出框时左边放,排重便在下格填,右上排重一个样.
(与罗伯法一样)3阶幻方解法 :
戴九履一,四二为肩,三七为腰,八六为足,五居中央.
8 1 6
3 5 7 3阶幻方
4 9 2

编写一个C++程序即可完成你所说的输入奇数n,输出n阶的奇数幻方。
#include
using namespace std;
int main()
{
int n;
cin >> n;
int a[n+1][n+1], i, j, k, bi, bj;
for(i=1;i<=n;i++)
f...

全部展开

编写一个C++程序即可完成你所说的输入奇数n,输出n阶的奇数幻方。
#include
using namespace std;
int main()
{
int n;
cin >> n;
int a[n+1][n+1], i, j, k, bi, bj;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0;
a[1][n/2+1] = 1;
i = 1;
j = n/2+1;
for(k=2;k<=n*n;k++)
{
if (i-1==0 && j-1==0)
{i=i+1;}
else if( i-1==0 && j-1!=0)
{i=n;j=j-1;}
else if(i-1!=0 && j-1==0)
{i=i-1;j=n;}
else if (a[i-1][j-1]!=0)
{i=i+1;}
else
{i=i-1;j=j-1;}
a[i][j]=k;
}
for(i=1;i<=n;i++)
{
for(j=1;j cout << a[i][j] << " ";
cout << a[i][n] << endl;
}
return 0;
}

收起

那你的问题具体是?

所谓“幻方”就是一个n*n 的矩形,在这个矩形中有规律的填入数值为 1—n2个数字,并且满足它的行,列,对角线的和相等.输入奇数n,输出n阶的奇数幻方 C语言输出一个可变的数字矩形n(n 所谓成功的女人就是白天特NB,晚上B特N 从边长为a+4的正方形剪去一个边长为(a+1)cm的小正方形,剩余面积又拼成一个巨型,这矩形面积为?m+n=3,2m方+4mn+2n方-6=? 求(2/n方+4/n方+…+2n/n方)的极限, S=n(n ^2+1) /2怎么推导的·?就是n阶幻方的公式,n为幻方的阶数,s是求和就是任意阶数幻方的各行、各列、各条对角线上所有数的和, n方+3m方n方=30m方+517 3m方n方的值为 矩阵的n阶方 一个大学高等数学极限题一个极限题 lim (n->∞时) [1!+2!+3!+ +n!]/n!就是1到n的阶乘的和与n的阶乘在 n趋向于无穷大时的比值 一个n*5的矩形,当n为哪些自然数时,可做出n个无盖立方体盒子? 一个椭圆的方程是 (x+m)方/a方+(y+n)方/b方=1能不能知道这个椭圆的圆心是多少“是不是(-m,-n)? m方+N方,2MN,m方—N方,判断三角形ABC的形状 如下图,在直径为AB的半圆内,划出一块三角形区域使三角形的一边为AB顶点C在半圆上,其他两边分别为6和8.现在建造一个内接于△ABC的矩形水池DEFN,其中DE在AB上,N在AC上,F点在BC上,如图的设计方 如果一个方向上有多个力在作用 物体移动一段距离 如何计算每个力所做的功?比如水平面上有F1=10N F2=20N F3=30N 向左推箱子 箱子移动10M 那么F1所做的功就是F1乘以20么 用20N的水平力将一个面积为1dm方,重10N的木块按在竖直墙壁上,墙收到的压力 【高中物理】为什么n匝矩形线圈的一边在切割磁感线时,所受的安培力为n^2F?我理解是如果有一匝线圈,那安培力就是F=B^2L^2V/R,那么N匝就是安培力=NF答案系数是N^2!为什么?N匝线圈里每匝线圈的 lim(n趋于无穷)[n(n+1)/2]/n方+3n的极限是多少? 解关于x的方程 m方(x-n)=n方(x-m) (m方不等于n方)