3.3 桥本分数式
数学家桥本吉彦教授于1993年在我国山东举行的中日美三国数学教育研讨会上向与会者提出以下填数趣题:把1,2,…,9这9个数字不重复填入下式的9个方格□中,使下面的分数式成立。
桥本教授当即给出了一个解答。
【问题】 试探求这一分数式填数趣题的填数结果。
【思考】 以某一简单分数式为基础,每个分数分子分母同时扩大以寻求数字不重复。
可采用在某一简单分数和式的基础上,试验把每一分数的分子分母同时扩大或缩小,以寻求在式中出现“1~9这9个数字出现而不重复”而达到目标。
(1)以简单分数式1/14+1/14=1/7为基础。
前一分数1/14的分子分母同时扩大4倍得4/56;
后一分数1/14的分子分母同时扩大7倍得7/98;
右边分数1/7的分子分母同时扩大3倍得3/21。
3个分数实现数字1~9各出现一次不重复,因而得到一个解:4/56+7/98=3/21。
(2)以简单分数式9/51+8/51=1/3为基础。
前一分数9/51的分子分母同时乘以2/3倍得6/34;
后一分数8/51保持不变;
右边分数1/3的分子分母同时扩大9倍得9/27。
3个分数实现数字1~9各出现一次不重复,因而又得到一个解:6/34+8/51=9/27。
采用以上方法试探,可省略对分数式相等的检测,减少计算量。但带有一定的盲目性,要想试探出所有解是困难的。
要求解桥本分数式的所有解,有必要借助程序设计进行全面搜索。
【编程拓展】
桥本分数式这一9数字填数趣题究竟有多少个不同的解(约定式左边两个分数中分子小的在前)?
同时,原题并没有要求3个分数为最简分数(即分子分母没有大于1的公因数),如果要求式中3个分数都为最简分数,又有多少个不同的解?
1. 程序设计要点
设分数式为b1/b2+c1/c2=d1/d2,注意到等式左边两个分数交换次序只算一个解答,因而约定b1<c1。
(1)设置枚举循环。
对6个分数所涉及的6个整数设置6重循环枚举。其中c1从b1+1开始取值,确保b1<c1。
(2)通过3重检测。
若分数式不成立,即b1∗c2∗d2+c1∗b2∗d2!=d1∗b2∗c2,则返回继续。
要求数字1~9在这6个变量中出现一次且只出现一次,分离出9个数字后用f数组统计各个数字的频数(如f[3]=2,即数字3出现2次),存在重复数字时返回。
(3)要求最简分数处理。
若在确定是否“最简分数”时输入字符'y',即选择“要求3个分数为最简分数”,设置循环j(2~9),如果存在j为某一分数的分子分母的公因数,则返回。
2. 桥本分数式程序设计
3. 程序运行结果与变通
若填数不要求3个分数为最简分数,程序运行结果如下所示。
若填数要求3个分数为最简分数,则程序运行结果如下所示。
程序能搜索不要求最简分数的桥本分数式,也能搜索附加条件“要求各分数都为最简分数”的分数式,这是程序设计的特色。
变通:把0,1,2,…,9这10个数字填入下式的10个方格中,要求:各数字不得重复;数字0不得填在各分数的分子或分母的首位。
这一分数式填数究竟共有多少个解?