数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
楼主: cdn

趣味数学——谁能做这题?

[复制链接]
发表于 2004-9-11 03:10:41 | 显示全部楼层
<><FONT color=#dd2292>各位,你们好,看了你们的帖子,我有下边算法,这个算法其实也是在一本书上看到的。其内容如下:</FONT></P><><FONT color=#dd2292 face=隶书>首先,将1填入最后一行的中间列,接着将下一个数填入上一行下一列即可;</FONT></P><><FONT color=#dd2292 face=隶书>其次,如遇上一行下一列有数,就将其填入上一个数的同列下一行。</FONT></P><P><FONT color=#dd2292 face=隶书>最后,继续第一步、第二步的做法,直到最终。</FONT></P><P><FONT color=#dd2292>这个算法的适用范围是在奇数阶的魔方阵。</FONT></P><P><FONT color=#dd2292>好了,这个算法就说到此,仅供各位参考。</FONT></P>
发表于 2004-9-11 18:11:47 | 显示全部楼层

简单回答

<><FONT size=3>谁能做这题?

</FONT>                     看过电视<<射雕英雄传&gt;&gt;的同学都知道,有这么一个幻方(如下图),它无论横着加,竖着加还是斜着加,总是等于15,聪明的英姑花了好几年的时间才得到这一结论,却没有想到桃花岛的黄老邪早就将它编成口诀“二四为肩,五居中央,填九履一“并创造出”桃花阵”。现给你1至16这16个自然数,请你构造出一个类似上图的幻方。(综合)

2 9 4
7 5 3
6 1 8

我的答案:</P>
<>5     12     7</P>
<>10   8      6</P>
<P>9     4      11需要讲明分析吗?</P>
发表于 2004-9-11 18:12:24 | 显示全部楼层
<>我有两个好方法都能够实现: </P><>方法一、可以把1~9这9个数写成一个菱形形状。如下:</P><>               1</P><P>        2          4</P><P>3            5            7</P><P>       6            8</P><P>              9</P><P>再把它压扁为一个正方形。如下:</P><P>     2            9            4</P><P>     7            5            3</P><P>     6            1            8</P><P>方法二、还有一种方法是适合所有2n-1阶的魔矩阵的(阶数为奇数)。方法如下:</P><P>先弄出一个3*3的表格。我暂且用9个“囗”来表示,如下:</P><P>           囗     囗     囗</P><P>           囗     囗     囗</P><P>           囗     囗     囗</P><P>然后在“囗”里面填1~9这9个数。</P><P>步骤为:</P><P>1、先把“1”填到第一行的中间。把”2“放到第0行,第三列的位置,但不存在有第0行的位置给它放,便把它拉到最后一行,列数不变,实际上”2“应该放在第3行第3列的位置了。</P><P>2、再把”3“填到,第2行,第4列的位置,但不存在有第4列的位置给它放,便把它拉到第1列,行数不变,实际上”3“应该放在第2行第1列的位置了。</P><P>3、以上所有的放法都是:前一个数为n行m列时,那么后一个数应为(n-1)行(m+1)列。</P><P>4、那么“4”应该放在第1行的中间,但已经给”1“占去了唯有另找空位了。那么“4”应该放在“3”的下面,即在第3行,第1列的位置。</P><P>5、那么根据步骤3,”5“应该放在第2行第2列的位置,而“6”应该放在第1行第3列的位置。</P><P>6、因为“7”放在第0行第0列的位置相当于位置给人家占去的那种情况,就像步骤4,的一样。所以“7”应该放在“6”的下面,即第2行第3列的位置。</P><P>7、“8”应该放在第1行第4列的位置,没地方放,所以又把它拉到第1行第1列的位置。</P><P>8、“9”就应该放在了第3行第2列的位置了。</P><P>所以最后的结果为: </P><P>    8  1  6</P><P>    3  5  7</P><P>    4  9  2</P><P>其实第2种方法要比第1种方法简单得多了,只要明白它当中的道理,很快就可以解答尤其是阶数比较大的魔矩阵。</P><P>以上两种方法都能够实现题目中的要求。大家不妨试试吧!


</P>
发表于 2004-9-11 18:16:33 | 显示全部楼层
<>不好意思,上次说漏了一点,就是第一种方法解释得不够详细。</P><>改正后如下:</P><><TABLE border=0 class=tablebody2 style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" width="90%"><TR><TD 9pt; LINE-HEIGHT: 12pt" width="100%"><img src="http://www.shumo.com/bbs/Skins/Default/topicface/face1.gif"> <B></B>
<P>我有两个好方法都能够实现: </P><P>方法一、可以把1~9这9个数写成一个菱形形状。如下:</P><P>               1</P><P>        2          4</P><P>3            5            7</P><P>       6            8</P><P>              9</P><P>再把这个菱形的四个角上的数字相互对换,即:“1”和“9”换,“3”和“7”换。
</P><P>然后再把它压扁为一个正方形。如下:</P><P>     2            9            4</P><P>     7            5            3</P><P>     6            1            8</P><P>方法二、还有一种方法是适合所有2n-1阶的魔矩阵的(阶数为奇数)。方法如下:</P><P>先弄出一个3*3的表格。我暂且用9个“囗”来表示,如下:</P><P>           囗     囗     囗</P><P>           囗     囗     囗</P><P>           囗     囗     囗</P><P>然后在“囗”里面填1~9这9个数。</P><P>步骤为:</P><P>1、先把“1”填到第一行的中间。把”2“放到第0行,第三列的位置,但不存在有第0行的位置给它放,便把它拉到最后一行,列数不变,实际上”2“应该放在第3行第3列的位置了。</P><P>2、再把”3“填到,第2行,第4列的位置,但不存在有第4列的位置给它放,便把它拉到第1列,行数不变,实际上”3“应该放在第2行第1列的位置了。</P><P>3、以上所有的放法都是:前一个数为n行m列时,那么后一个数应为(n-1)行(m+1)列。</P><P>4、那么“4”应该放在第1行的中间,但已经给”1“占去了唯有另找空位了。那么“4”应该放在“3”的下面,即在第3行,第1列的位置。</P><P>5、那么根据步骤3,”5“应该放在第2行第2列的位置,而“6”应该放在第1行第3列的位置。</P><P>6、因为“7”放在第0行第0列的位置相当于位置给人家占去的那种情况,就像步骤4,的一样。所以“7”应该放在“6”的下面,即第2行第3列的位置。</P><P>7、“8”应该放在第1行第4列的位置,没地方放,所以又把它拉到第1行第1列的位置。</P><P>8、“9”就应该放在了第3行第2列的位置了。</P><P>所以最后的结果为: </P><P>    8  1  6</P><P>    3  5  7</P><P>    4  9  2</P><P>其实第2种方法要比第1种方法简单得多了,只要明白它当中的道理,很快就可以解答尤其是阶数比较大的魔矩阵。</P><P>以上两种方法都能够实现题目中的要求。大家不妨试试吧!


</P></TD></TR></TABLE></P>
发表于 2004-9-12 09:38:59 | 显示全部楼层
[em02]
发表于 2004-9-15 06:06:30 | 显示全部楼层
<>楼顶的那个幻方,相传是大禹 治水时一只海龟背壳上的图片,名字叫什么来着?有兴趣的可以查一下,那是个三阶的,我国古代的一个数学家也曾研究过这个问题,并给出了个 算法,听关用 的,它可以 用到高阶幻方,</P>
发表于 2004-9-17 02:55:14 | 显示全部楼层
<TABLE borderColor=#cccccc cellSpacing=2 cellPadding=2 width="100%" align=center bgColor=#ffffff border=2>

<TR>
<TD> 4</TD>
<TD> 16</TD>
<TD> 11</TD>
<TD> 3</TD>
<TR>
<TD> 15</TD>
<TD> 7</TD>
<TD> 8</TD>
<TD> 4</TD>
<TR>
<TD> 1</TD>
<TD> 9</TD>
<TD> 10</TD>
<TD> 14</TD>
<TR>
<TD> 14</TD>
<TD> 2</TD>
<TD> 5</TD>
<TD> 13</TD></TR></TABLE>
发表于 2004-9-25 07:08:08 | 显示全部楼层
哇 我是新手 听到楼上朋友的分析 佩服之至啊!!可以加我吗?QQ349132154
发表于 2004-10-7 11:02:30 | 显示全部楼层
  在MATLAB里输入magic(n),要多少阶的幻方都行。
发表于 2004-10-12 06:25:11 | 显示全部楼层
<>楼上的小弟们,其实这个题目用c语言编是可以实现的,并且运算量也不大,时间复杂度也就是n的2次幂。我编的这个程序可以求出40阶以内的任意阶魔方矩阵。程序在下面下载:</P><><a href="http://www.stuplaza.net/free/liuhao/magic.exe" target="_blank" >http://www.stuplaza.net/free/liuhao/magic.exe</A></P><>求四的倍数阶的程序部分代码如下:</P><P><FONT color=#cc3333>{
for(i=0;i&lt;n;i++)
for(j=0;j&lt;n;j++)
{
k+=1;
m[j]=k;
if((int)(mod(x[j],4)/2.0)==(int)(mod(y[j],4)/2.0))
m[j]=n*n+1-m[j];
}
}</FONT></P><P><FONT color=#c43c3c>void meshgrid(int a[N][N],int b[N][N],int n)
{
int i,j;
for(i=0;i&lt;n;i++)
for(j=0;j&lt;n;j++)
{
a[j]=j+1;
b[j]=i+1;
}
}
float mod(float f,int n)
{
int t,m;
t=(int)f/n;
if(f&gt;0)
m=f-t*n;
else if((int)f%n==0)
m=t*n-f;
else
m=(-t+1)*n+f;
return m;
}</FONT></P>
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2025-7-5 16:55 , Processed in 0.096996 second(s), 13 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表