数模论坛

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

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

[复制链接]
发表于 2004-7-20 03:26:14 | 显示全部楼层
这个应该可以用计算机很容易做撒,着不就是所谓的魔方矩阵吗?可以直接在MATLAB的命令里出入magic(4)命令就可了啊
发表于 2004-7-20 05:02:08 | 显示全部楼层
<>有没有一个可以算N阶的方法?</P>
发表于 2004-7-20 05:39:56 | 显示全部楼层

呵呵,回答,你的简单问题

<TABLE  width="90%" border=0>

<TR>
<TD  width="100%">
<>               
2 9 4
7 5 3
6 1 8</P>
<>这样只要使5+n(n=2,4,6,8)</P>
<>然后使其佘各数+n/2</P>
<P>就可以得出这样的方陈列!!!
</P></TD></TR></TABLE>
发表于 2004-7-20 21:33:33 | 显示全部楼层
这个C++程序时间消耗太大了,对于高阶的运算是不适合的,应该还有好的算法。
发表于 2004-7-20 23:41:18 | 显示全部楼层
有没有方法找出所有的呢?比如先不管数是否重复,而是保证每行,每列,对角线和=nx(n^2+1)/2,且最大数&lt;=n^2,然后判断是否有相同的数。另外,关于构造,单尊的《数学竞赛研究教程》上有答案,大致想法是交换。
发表于 2004-7-24 07:59:12 | 显示全部楼层
<>呵呵,</P><>其实当 n&gt;2 时都有构造方法,</P><>我知道有一种方法是 奇偶分情况,</P><P>奇数 可用 斜线法,</P><P>偶数 可用 斜矩形法,</P><P>这些都是构造方法,</P><P>时间复杂度都为 o(n^2).</P><P>一些 趣味编程 的书里有讲的。</P>
发表于 2004-7-28 23:58:54 | 显示全部楼层

其实也不难啊!

<>学过MATLAB的就知道</P>
<>其实这只不过是一个简单的矩阵</P>
<>只要在command window里面键入magic(4)就行了</P>
<P>    16     2      3     13
     5     11    10     8
     9      7      6     12
     4     14     15     1
</P>
发表于 2004-7-29 00:45:40 | 显示全部楼层

这难不倒我

<><FONT color=#e6e61a face=宋体 size=4 style="BACKGROUND-COLOR: #2b2bd5">void main()
{int a[16][16],i,j,k,p,m,n;
p=1;
while(p==1)
   {printf("Enter n(n=1~15)");
    scanf("%d",&amp;n);
    if((n!=0)&amp;&amp;(n&lt;=15)&amp;&amp;(n%2!=0))
    p=0;
    }
for(i=1;i&lt;=n;i++)
   for(j=1;j&lt;=n;j++)
     a[j]=0;
   j=n/2+1;
   a[j]=1;
   for(k=2;k&lt;=n*n;k++)
     {i=i-1;
      j=j+1;
      if((i&lt;1)&amp;&amp;(j&gt;n))
{i=i+2;
  j=j-1;
  }
      else
{if(i&lt;1)i=n;
  if(j&gt;n)j=1;
  }
      if(a[j]==0)
a[j]=k;
      else
{i+=2;
  j-=1;
  a[j]=k;
  }
     }
   for(i=1;i&lt;=n;i++)
     {for(j=1;j&lt;=n;j++)
printf("%4d",a[j]);
      printf("\n");
      }
     }</FONT></P>[em05]
发表于 2004-7-29 00:59:36 | 显示全部楼层

对不起,里面有一个错误

<FONT color=#e6e61a style="BACKGROUND-COLOR: #3c3cc4">void main()
{int a[16][16],i,j,k,p,m,n;
p=1;
while(p==1)
   {printf("Enter n(n=1~15):");
    scanf("%d",&amp;n);
    if((n!=0)&amp;&amp;(n&lt;=15)&amp;&amp;(n%2!=0))
    p=0;
    }
for(i=1;i&lt;=n;i++)
   for(j=1;j&lt;=n;j++)
     a[j]=0;
   j=n/2+1;
   a[1][j]=1;
   for(k=2;k&lt;=n*n;k++)
     {i=i-1;
      j=j+1;
      if((i&lt;1)&amp;&amp;(j&gt;n))
{i=i+2;
  j=j-1;
  }
      else
{if(i&lt;1)i=n;
  if(j&gt;n)j=1;
  }
      if(a[j]==0)
a[j]=k;
      else
{i+=2;
  j-=1;
  a[j]=k;
  }
     }
   for(i=1;i&lt;=n;i++)
     {for(j=1;j&lt;=n;j++)
printf("%4d",a[j]);
      printf("\n");
      }
     }</FONT>
发表于 2004-7-30 18:12:48 | 显示全部楼层

太奇妙了!!

<>看到他们我觉得自己知到的太少了</P>[em09]
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

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

GMT+8, 2024-4-29 15:09 , Processed in 0.048882 second(s), 13 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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