数模论坛

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

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

[复制链接]
发表于 2005-7-19 01:05:15 | 显示全部楼层
<>对4阶的        r1+r2     r6     r5+r7   r3+r4</P>
<>               r3+r5    r4+r7   r1+r6   r2</P>
<>               r4+r6    r2+r5   r3      r1+r7</P>
<P>               r7       r1+r3   r2+r4   r5+r6</P>
<P>r1---r7 随便给出一些1---16中的数字</P>
发表于 2005-7-22 19:28:19 | 显示全部楼层
<>谁能完成加上以下三的条件的4介幻方</P>
<>①四个角上的四个小正方形里的四个数之和都是34。<BR>   ②中间的一个小正方形里的四个数之和也都是34。 <BR>   ③大正方形里的四个角上的四个数之和也都是34。谢谢</P>
发表于 2005-7-28 02:25:37 | 显示全部楼层
<>奇数阶的魔方都有算法,好象著名大学的c的程序教程上有,就不详细了 </P>
<>偶数的不太清楚了</P>
发表于 2005-7-28 02:43:50 | 显示全部楼层
我记得在matlab中有一个这么命令来着。忘记了,就一个单词,能够成n阶的
发表于 2005-8-19 23:54:57 | 显示全部楼层
<>转:</P>
<>解:魔方阵中各数的排列规律如下:</P>
<>(1)将1放在第一行中间一列;</P>
<P>(2)从2开始直到n×n止各数依次按下列规则存放:每一个数存放的行比前一个数的行数减1,列数加1(例如上面的三阶魔方阵,5在4的上一行后一列);</P>
<P>(3)如果上一数的行数为1,则下一个数的行数为n(指最下一行)。例如1在第1行,则2应放在最下一行,列数同样加1;</P>
<P>(4)当上一个数的列数为n时,下一个数的列数应为1,行数减1。例如2在第3行最后一列,则3应放在第2行第1列;</P>
<P>(5)如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。例如按上面的规定,4应该放在第1行第2列,但该位置已被1占据,所以4就放在3的下面。由于6是第1行第3列(即最后一列),故7放在6下面。按此方法可以得到任何阶的魔方阵。#include &lt;stdio.h&gt;</P>
<P>main()</P>
<P>{ int a[16][16],i,i,k,p,m,n;</P>
<P>  p=1;</P>
<P>  while(p==1)                             /*要求阶数为1~15的商数*/</P>
<P>  { printf("Enter n(n=1~15):");</P>
<P>      scanf("%d",&amp;n);</P>
<P>    if((n!=0)&amp;&amp;(n&lt;=15)&amp;&amp;(n%2!=0))  p=0;</P>
<P>  }</P>
<P>  for(i=1;i&lt;=n;i++)                      /*初始化*/</P>
<P>    for(j=1;j&lt;=n;j++)  a[j]=0;</P>
<P>  j=n/2+1;                               /*建立魔方阵*/</P>
<P>  a[1][j]=1;</P>
<P>  for(k=2;k&lt;=n*n;k++)</P>
<P>  { i=i-1;</P>
<P>    j=j+1;</P>
<P>    if((i&lt;1)&amp;&amp;(j&gt;n))</P>
<P>    { i=i+2;</P>
<P>      j=j-1;</P>
<P>    }</P>
<P>    else</P>
<P>    { if(i&lt;1)  i=n;</P>
<P>      if(j&gt;n)  j=1;</P>
<P>    }</P>
<P>    if(a[j]==0)  a[j]=k;</P>
<P>    else</P>
<P>    { i=i+2;</P>
<P>      j=j-1;</P>
<P>      a[j]=k;</P>
<P>    }</P>
<P>  }</P>
<P>  for(i=1;i&lt;=n;i++)                      /*输出魔方阵*/</P>
<P>  { for(j=1;j&lt;=n;j++)</P>
<P>      printf("%4d",a[j]);</P>
<P>    printf("\n");</P>
<P>  }</P>
<P>}</P>

<P>运行结果:</P>
<P>Enter n(n=1~15):5↙</P>
<P>  17  24   1   8  15</P>
<P>  23   5   7  14  16</P>
<P>   4   6  13  20  22</P>
<P>  10  12  19  21   3</P>
<P>  11  16  25   2   9</P>

<P>说明,魔方阵的阶数应为奇数,程序指定其最大值为15。今定义数组a为16行16列,第0行第0列不用来放数据,只用第1~15行,以符合人们的习惯。</P>
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

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

GMT+8, 2024-4-26 23:40 , Processed in 0.050028 second(s), 13 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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