数字填图游戏

萌到你眼炸
507次浏览
2021年01月01日 03:27
最佳经验
本文由作者推荐

烟盒设计-法布尔的故事

2021年1月1日发(作者:骆度镛)


实验七 数字填图问题


一、问题背景和实验目的

二、 相关函数(命令)简介
三、 实验内容

四、 自己动手



一、问题背景和实验目的

数字填图问题是数学问题的一种 趣味形式.早在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),小计有解 108=80 个,解例见下表:


(3) g = 7,则 h + i = 11.小计有解 58=40 个,解例见下表:


(4) g = 6,则 h + i = 12.小计有解 68=48 个,解例见下表:

(5) g = 5,则 h + i = 13.小计有解 58=40 个,解例见下表:


(6) g = 4,则 h + i = 14.小计有解 48=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 个不同竖式 (解),小计有解 212=24 个.

完全类似地有如下一系列过程:

(2) g = 7,d = 6.则 h + i = 2(不可能,舍去) 或 h+i=11.仿(1),小计有解
212=24 个.



(3) g = 6,d = 5.则 h + i = 3 或 h + i = 12.有解 112=12 个,解例见下表:

(4) g = 5,d = 4.则 h + i = 4 或 h + i = 13.有解 312=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,使得结果也可以保存到一个
文本文件中.

腾空而起-痛心


魔兽世界毕业演说-冷餐会


六级听力mp3-将欲取之必先与之


300字作文大全-推出的近义词


奇怪我不懂得爱-老师个人工作总结


写花的诗句-幽兰露


dnf赚钱方法-叶


泰坦尼克号主题曲歌词-想象作文400字