数字填图游戏
烟盒设计-法布尔的故事
实验七 数字填图问题
一、问题背景和实验目的
二、 相关函数(命令)简介
三、 实验内容
四、 自己动手
一、问题背景和实验目的
数字填图问题是数学问题的一种
趣味形式.早在19世纪后半期,一些数学
家就在报刊中大量使用数字填图游戏和字谜游戏等,目的是使
业余爱好者也能通
过简单的形式去认识、理解和琢磨深奥的数学问题,这些问题中甚至包括困惑了
世间智者350多年、于1994年才刚刚被证明了的“费马大定理”.100多年来,
数字填图问题
对数学界所起的作用是不言而喻的.
大家都知道,数学问题一般都经过严格的逻辑证明才得以
解决.而逻辑证明
是指从一些公理出发,经过逻辑推理来证明问题.但随着20世纪40年代以来计算机的诞生和发展,计算机改变了整个世界,计算机已在各个领域发挥作用,并
取得了许多重大进展
.于是,能否用计算机来证明数学问题便成了大家关心的话
题.
所谓计算机证明是指
充分发挥计算机计算速度快和会“推理”的特点,用计
算机程序模拟解题或进行穷举检验,最后得到问题
的解.几乎所有的数学家对计
算机证明持保留态度,因为他们相信,只有逻辑证明才是真正可靠的.但“
四色
问题”的证明,又使他们感到困惑,因为“四色问题”的证明实际上是一个计算
机证明.<
br>
能否用计算机来证明数学问题的争论可能会持续一个相当长的时间,本实验
旨在通过生
活中几个常见的数字填图问题的探究,谈谈这类问题的逻辑推理解法
和计算机解法.
二、 相关函数(命令)简介
1.cputime命令:记录执行本命令时的Matlab时钟的时间(秒).
2.tic命令:开始计时.
3.toc命令:结束计时.
4.disp(x):输出矩阵 x.x的各项应为字符,所以在输出时要进行转化.
相关的命令有:
num2str( ):把数值转化为字符;mat2str(
):把矩阵转化为字符.
5.fopen(filename,
mode):用mode方式打开建立filename文件,以备写入
数据,使用方式:fid =
fopen(filename, mode).
6.fclose(fid):关闭上述文件.
例如下列程序是把一个两行的矩阵y写入文件:
x=0:0.1:1;
y=[x;exp(x)];
fid=fopen(’’,’wt’);
fprintf(fid,’ x exp(x)n’);
fprintf(fid,’%6.2f %12.8fn’,y);
%实际得到的是矩阵y的转置矩阵
status=fclose(fid);
与C语言的文件操作方式相类似.
三、
实验内容
让我们先从一个简单的问题出发来谈谈数字填图问题的两种解法.然后通过
几个稍复杂问题的探究,从中展示逻辑推理的严谨以及计算机解法的魅力,启迪
我们去解决更复杂的数学
问题.
注:在本实验中,将表达式 abc 理解为 ,即
100*a+10*b+c,其余类似,
不另加说明.
(一)、一个简单的问题及其解答
问题一:在图 1
的几个加法等式中,每个□表示一个非零数字,任意两个数字
都不相同,问有多少个解?
图1
【逻辑解法】 为简洁起见,将它的 3 个式子记作: a +
b = c,d + e = f,g + h
= i 0,若问题有解,则显然有 i =
1,且(a + b) + (d + e) + (g + h) = c + f + i
10,
故 45 = (a + b + c) + (d + e + f) + (g + h +
i) = 2 (c + f) + i 11,即 c + f = 17,故 c
= 8,f
= 9 或 c = 9,f = 8.
考虑到 a ~ i 互不相同,当要求 a <
b,d < e,g < h 时,有如下 4 组解(见
下表):
注:本问题实际上仅有 2 个解是本质的,即表中的第 2、3 行,第 4、5
行所
代表的解仅是位置不同而已.如不要求 a < b,d < e,g < h,则解的个数是
个.
【计算机解法】为验证此结果,可用
Mathematica、Matlab、Turbo C 等软
件进行模拟解题,充分利用计算机运算
速度快的特点进行穷举法检验.实践表明
本问题解的情况恰如上所述.用 Matlab 实现的程序清
单可参见附录1,这一算
法比较慢(一个更慢的算法参见附录1B,试分析其原因),而一个提速的程序
清单可参见附录2,Turbo C
程序清单可参见附录3,而Mathematica程序清单可
参见附录4.
【评论
】这个问题的逻辑解法十分简单,或许根本不需要计算机解法,但所
用程序有一定的代表性,稍加修改即
可解决一系列问题,这点可从下面的问题中
看到.
(二)、几个较复杂的问题及其解答
问题二:在图 2 的 4
个算式中,每个□表示一个非零数字,任意两个数字都不
相同,问 (A)、(B)、(C) 和
(D) 这 4 种情形分别有多少个解?
图2
讨论:显然,情形 (C) 无解.情形 (D) 与 情形 (C)
实际上是同一个问题,
因此也无解.
情形 (B) 与 情形 (A)
实际上也是同一个问题.我们先讨论情形 (A) 的解
的个数.
【逻辑解法】为简洁起见,将此竖式记作:abc + def = ghi,即 ,其中 a
~ i 代表 1 ~ 9 这 9
个互不相同的非零数字.据九余数性质可知,两个“加数”
中的六个数字之和被 9
除的余数应等于“和数”中的三个数字之和被 9
除的余
数.又这两个“加数”与“和数”中共九个数字正好是1,2,
,9,它们的和
为 45,被 9 除的余数是 0,易见“和数”的三个数字之和被 9
除的余数必为 0,
也即:“和数”是 9
的倍数.注意到题设可知,“和数”的三个数字之和必定
为:g + h + i = 9 或 g +
h + i = 18.
<1> 考虑 g + h + i = 9 的情形.
(1) 首先必定有 g > 3,否则 {a,d} 最小为 {1,2},{b,e} 最小为
{4,
5},{c,f} 最小为 {6,7},此时已有 abc + def > 400,与 g
3 矛盾.故 g 4;
另外,g 6 为显然;
(2) 若g =
4,由 g + h + i = 9,h + i = 5,故 {h,i} 最小为 {1,4} 或
{2,
3};但已有 g = 4,故 {h,i} 为 {2,3},而 {a,d} 最小为
{1,4},从而g
5,与 g = 4 矛盾;
(3) 若g =
5,由 g + h + i = 9,h + i = 4,故 {h,i} 为 {1,3};而
{a,d}
最小为 {2,4},从而g 6,与 g = 5 矛盾;
(4) 若 g = 6,由 g + h + i = 9,h + i = 3,故 {h,i}
为 {1,2};而 {a,d}
最小为 {3,4},从而g 7,与 g = 6
矛盾.
综上所述,g + h + i = 9 的情形下问题无解.
<2> 考虑 g + h + i = 18 的情形.由于 g 4(理由同上),以下按 g
= 9,
8,,4 的顺序分类讨论:
(1) g = 9,则 h + i =
9.由于 a ~ i 互不相同,于是 g,h,i 的可能的取值见下
表:
对这些竖式有序地交换两个加数的百位数、十位数和个位数,可得到每个类
型的 8(=)
个不同竖式 (解),小计有解 12 8 = 96 个.
注意:表中的第 2、5、6、9 列为容易造成失解的地方,要特别留意.
完全类似地有如下一系列过程:
(2) g = 8,则 h + i =
10.仿(1),小计有解 108=80 个,解例见下表:
(3) g =
7,则 h + i = 11.小计有解 58=40 个,解例见下表:
(4) g = 6,则 h + i = 12.小计有解 68=48
个,解例见下表:
(5) g = 5,则 h + i = 13.小计有解
58=40 个,解例见下表:
(6) g = 4,则 h + i =
14.小计有解 48=32 个,解例见下表:
结论:本问题的解的个数为:(12 + 10 + 5 + 6 + 5 + 4) 8 =
42 8 = 336.
注:<1>如不考虑两个加数的上下位置关系,则总的解的个数为:42 82 =
168.
<2>由于情形 (B) 与 情形 (A)
是同一个问题,故解的个数也为:42 8
= 336.
【计算机解法】为验证此结果,仍用 Matlab、Mathematica、Turbo C 编程
进行模拟解题,充分利用计算机运算速度快的特点进行穷举法检验.实践表明本
问题有且只有
336 个不同竖式(解),而 Matlab 程序清单可参见附录5,你可
发现它与附录 1
十分相似.
【评论】这个问题的逻辑解法较复杂,而计算机解法则是如此的简
单快捷,
运行整个程序不要 1 分钟.实际上非常复杂的“四色问题”的证明也是这样:
对
1482
种有代表性地图的分析,若依靠人工去做,可能要几十年甚至上百年的
时间,而用计算机,只要
1200 小时即告完成.这还是 70
年计算机的计算水平,
若用现在的计算机,计算时间应该不会超过一天!
问题三:在图 3
的加法算式中,每个□表示一个非零数字,任意两个数字
都不相同,问可有多少个解?
【逻辑解法】为简洁起见,将此竖式记作:
a + bc + def = ghi
或 ,其中 a ~ i 代表 1 ~ 9 这 9 个互不相同的非
零数字.
据九余数性质并采用完全类似问题二的讨论可知,“和数”的三个数字之和
必定为:g + h
+ i = 9 或 g + h + i = 18.同时,g 1,否则 d = 1;另外 g >
d,
从而 g = d + 1.
由于 9 g 2,以下按 g =
9,8,7, ,2 的顺序分类讨论:
(0) g = 9,d = 8.则 h
+ i = 9.由于 a ~ i 互不相同,于是 g,h,i 的可能
的取值为(见下表):
图3
小计有解 0 个.
(1) g = 8,d
= 7.则 h + i = 1(不可能,舍去) 或 h+i=10.由于 a ~ i
互不相
同,于是g,h,i 的可能的取值为(见下表):
对这些竖式有序地交换三个加数的个位数、两个加数的十位数,可得到每个类型
的 12
个不同竖式 (解),小计有解 212=24 个.
完全类似地有如下一系列过程:
(2) g = 7,d = 6.则 h + i
= 2(不可能,舍去) 或 h+i=11.仿(1),小计有解
212=24 个.
(3) g = 6,d = 5.则 h + i = 3 或
h + i = 12.有解 112=12 个,解例见下表:
(4) g =
5,d = 4.则 h + i = 4 或 h + i = 13.有解 312=36
个,解例见下表:
(5) g = 4,d = 3.则 h +
i = 5 或 h + i = 14.有解 2 12 = 24 个,解例见下
表:
(6) g = 3,d = 2.则 h + i = 6 或 h + i
= 15.有解 2 12 = 24 个,解例见下
表:
(7) g =
2,d = 1.则 h + i = 7 或 h + i = 16.有解 2 12 = 24
个,解例见下
表:
结论:本问题的解的个数为:(2
+ 2 + 1 + 3 + 2 + 2 + 2) 12 = 168.
【计算机解法】让我们再尝试计算机解法.仍用 Matlab、Mathematica、Turbo
C
编程进行穷举法验证,程序清单类似于附录1~附录5,不再另附.运行结果
表明本问题的确有且只有
168 个不同竖式(解),要说明的是:该程序在一般
的计算机上运行一次也只需不到 1
分钟.
【评论】也许有人会说,你的问题还仅是一个有穷的问题,象“费马大定理”
这样的无穷问题,你的计算机就无能为力了! 情况或许是这样.但应该注意到:
非常复杂的“四色问题
”也是一个无穷问题,但妙就妙在有人能将它们缩小到
1482
种有代表性地图以内,从而成为一个有穷的问题!
至此,对于计算机解题的作用恐怕再不能视而不见了! 下面的两个问题也是
成功地运用计算机
解题的的一些典型例子,而至少到目前为止还没有看到它们的
推理解法.
问题四:图 4 的加法等式是:两个真分数之和等于第三个真分数,每个□
表示一个不为 0
的数字,任意两个数字都不相同.比如:
出所有可能的解.
,试找
图4
【计算机解法】本问题利用计算机程序已找到解答,共有 10
个解.解答请
参见:《数学教学》(华东师范大学)1994 年第 5 期.
【评论】程序如何编? 看起来问题似乎很简单,只要将附录1~附录5
稍加
修改即可.例如可利用附录 6 的 Matlab
程序进行计算.但实际情况让我们大
吃一惊:用 Matlab 程序居然只有 6 个解!还有 4
个解到哪里去了?用 Turbo
C 程序编写出的类似的程序居然只有 7(或9)个解!还有
3(或1)个解到哪
里去了?还有人用 Turbo C 程序编写出的类似的程序,却居然得到了
11 个
“解”!这个多出的 1 个“解”是哪里来的?
类似的问题还会发生在本实验的“四、自己动手”的第 6 题中,用不同的
语言编写出的类似
程序,其运行结果居然差距很大,你能明白其中的道理吗?根
据观察,可能是浮点问题,也可能是整数的
上界问题,或别的什么原因.具体什
么原因,留作思考题.
问题五:图 5
的加法等式是:两个假分数之和等于第三个假分数,每个□
表示一个不为 0
的数字,任意两个数字都不相同.试找出所有可能的解.
图5
<
br>【计算机解法】本问题利用计算机程序也已找到解答,共有41个解.同样
只要将附录1 ~
5的程序稍加修改即可.
(三)、小结
数字填图问题是一种活泼的、变形
的数学问题,逻辑推理是这类问题的一般
解法.但也有若干数字填图问题要找到这样的逻辑推理解法是非
常地困难,而采
用计算机解法则轻而易举.问题一和问题二就是这样的例子.至于问题四和问题
五则只能给出计算机解法.尽管数学家们很难接受计算机解法,因为他们担心计
算机会出错(尽管这种出
错的概率几乎为零!),更重要的是他们坚信逻辑证明
是解答这类问题的根本方法.但上述事实证明计算
机解法也是十分有效的.另一
个公认的例子是“四色问题”,它的证明实际上就是一个计算机证明.关于
这个
问题的争论可能会有一个相当长的时间.不管将来的结论如何,但计算机证明
(解题)
毕竟代表将来数学问题解决的一个方向.就象安德鲁·怀尔斯 (Andrew
Wiles) 突发灵
感地把“伊娃沙娃理论”和“科利瓦金弗莱切方法”结合在一起
可以完美地互相补足,以致最终证明了“
费马大定理”一样,未来的数学家或许
会让“逻辑证明”和“计算机证明”也完美结合,从而解决更多的
数学问题.
注;西蒙·辛格[英],1998 年.《费马大定理一个困惑了世间智者
358 年
的谜》,薛密 译,上海译文出版社.
四、
自己动手
1.一道竞赛题(以下称“原问题”)
1998 年 4
月香港数理教育学会主办的初中数学竞赛有这样一道试题:
在下面的加法算式中,每个□表示一个数字,任意两个数字都不相同,那么
A 与 B
的乘积的最大值是多少?
解答:最大值是
15.你能给出逻辑推理解法并用计算机加以验证吗?
由上述问题引伸出的三个问题:
2.满足原问题题意的不同的加法算式(竖式)共有多少个?
本问题有
60 个不同竖式(解).试给出逻辑推理解法并用计算机加以验证.
原竞赛题是针对初中生
而设计的,故问题的难度被大大降低了.本练习已有
一定难度.不可否认,逻辑推理是解决问题的重要途
径,而计算机模拟解题在其
中所起的作用也是不言而喻的.我们可以将练习 2
一般化,你将发现计算机模
拟解题的有效性和重要性.
3.如果在原问题中删除条件
:“任意两个数字都不相同”,则满足题意的不同
的加法算式(竖式)共有多少个?
本问题实际上是一个有约束条件的全排列问题.本问题的答案是:48195 个!
这真是一个神奇的数值.要得到这个数值应该说是有一定难度的.试给出逻
辑推理解法并用计算机加以
验证.
注:假如在本问题中允许三个“加数”与“和数”均可以由数字 0 作为开
头,去掉“任意两个数字都不相同”这个条件限制,本问题则变成一个真正的全
排列问题.在 a +
bc + def = ghij 中,“和数”ghij 是被动的.由 a,b,c,d,
e,f
{0,1,2,3,4,5,6,7,8,9},此时本问题有解 10
6
个.
练习 3 是利用计算机模拟解题的真正代表,可以说计算机模拟解题能力在
某些方面确已达到了逻辑推理解题的能力.而以下的练习 4 将把练习 2 的难度
进一步加
大.你将发现运用计算机模拟解题在某些方面甚至已超过运用逻辑推理
解题.这个问题是:
4.假如违反常规,允许三个“加数”与“和数”均可以由数字 0 作为开头,保
留条件:“
任意两个数字都不相同”,则满足原问题题意的不同的加法算式(竖
式)共有多少个?
本问题共有 228 个解,即在练习 2 有 60 个不同竖式(解)的基础上再增
加
168 个解.试给出逻辑推理解法并用计算机加以验证.
分析和观察:练习 4
的结论与本实验中的“问题三”的结论是否有一定的
联系? 有何联系?
5.验证本实验中的“问题四”、“问题五”的结论.能否给出相应的推理解法?
答案是:非常困难!
不妨一试.你是否发现运用计算机模拟解决本问题,已
超过运用逻辑推理解决本问题?
6.设A ~ J表示十个互不相同的数字,问:方程(注意:
组成分数的四个数的
第一位数字不能为0)
共有多少个解?
答案是110个? 是118个? 是其它的数字?为什么?
7.前面所说的“用不
同的语言编写出的类似程序,其运行结果居然差距很大”
现象,你遇到过吗?试结合附录6,分析产生漏
(增)解的原因.
8.利用Matlab文件操作技术修改附录1,使得结果可以保存到一个
文本文件
中.类似地,用Turbo
C文件操作技术修改附录3,使得结果也可以保存到一个
文本文件中.