趣味数学及编程拓展
上QQ阅读APP看书,第一时间看更新

3.5 优美综合运算式

本节创新构建隐序四则运算式及综合运算数学式,这是一个有趣也有难度的填数游戏。

各数学式称为“优美”,是指各个数字在式中不重复,是和谐美的具体体现。

3.5.1 隐序四则运算式

本节所论述的数式除了含四则运算与数字不重复外,还必须符合指定隐序。这一新增要求是新颖的,也是有趣的。

把数字0,1,2,…,9这10个数字不重复填入以下含加、减、乘、除(乘除运算优先于加减运算)的四则运算式中的10个□中,使得下式成立。

约定式(1)填数字时,1,0不出现在式左边的一位数中,且数字0不能为整数首位。

同时,要求式中的10个不重复的数字须符合指定隐序,指定隐序由输入的整数决定。例如,如果指定隐序为4位数2019,则该运算式中数字的隐含顺序为:数字2须在0的左边,数字0须在1的左边,而数字1须在9的左边(这就是隐序的含意)。

例如,267+80÷5-31×9=4就是一个符合2019指定隐序的优美四则运算式。

输入指定隐序的整数,构建并输出所有符合指定隐序的优美四则运算式。

1. 设计要点

(1)数据结构。

以上四则运算式中的各数依次设置为变量a,b,c,d,e,f,即四则运算式为

同时设置3个数组:g数组统计式中共6个整数的10个数字的频数,便于判别重复数字;h数组标记式中10个数字的位置,便于判别是否符合指定隐序;w数组存储指定隐序,为判别是否符合指定隐序提供数据。

(2)设置枚举循环。

设置a,c,d,e,f循环,其中c,e,f都是1位数,f循环0~9取值,c,e循环2~9取值;数a为3位数,循环102~987取值;数d为2位数,循环10~98取值。

(3)计算整数b。

把以上四则运算式变形为以下的乘积式是简便的。

对每一组a,c,d,e,f,计算b。这样处理,可省略b循环,省略b是否能被c整除,也省略等式是否成立的检测。

计算b后,检测b是否为2位数。若计算所得b非2位数,则返回。

(4)判别是否存在重复数字。

然后分别对6个整数进行数字分离,设置g数组对6个整数分离的共10个数字进行统计,g[x]即为数字x(0~9)的频数。同时,应用h数组标记式中10个数字的位置。

例如,g[3]=2,即为2个数字3;h[5]=4,即数字5在数式中第4个位置上。

若某一g(x)≠1,不满足10个数字都出现一次且只出现一次,标记t=1。

若所有g(x)全为1,满足数字0,1,2,…,9这10个数字都出现一次且只出现一次,保持标记t=0,则优美四则运算式成立。

(5)判别是否符合指定隐序。

式中10个数字的分布必须符合指定顺序的要求,这既是重点,也是难点。

输入的指定隐序的整数m要求没有重复数字,位数不限(当然不能超过10)。因此,首先分离隐序m的各个数字(设为n个数字),并从个位开始赋值给w[1]~w[n]。

综合h与w数组来判别所得优美四则运算式的10个数字分布是否符合指定要求。

因指定隐序的整数m的w[k]在w[k-1]的前面,即h[w[k]]<h[w[k-1]](k:2~n)才是符合指定隐序。若出现在某一个k(2~n中的一个)h[w[k]]>=h[w[k-1]](k:2~n)不符合指定隐序,即返回试下一个数式。

2. 程序设计
3. 程序运行示例与说明

从运行结果中清楚可见,每个式中的10个数字无重复,且其分布隐含指定2019指定顺序。式中含加减乘除四则运算,运算结果使=成立。

若输入的指定隐序数m为20195,则只有以上第2,3,4,5个解满足要求。

若输入的指定隐序数m为20197,则只有以上第2,7个解满足要求。

这里特别强调,输入隐序数m时,不能含有重复数字,否则,程序难以进行测试。

3.5.2 综合运算式

【问题】 在以下数式(2)中已填有数字0,4,6,请把另7个数字1,2,3,5,7,8,9不重复填入以下含加、减、乘、除与乘方的综合运算式中的7个□中,使得该式成立。

约定数字1不出现在数式的一位数中。

【思考】 把式中乘积项设置在大于乘方数值附近探试。

式中10个数字已填有3个,是为了减少填数字的难度。

设式(4)中的2位数为x。

注意到已有46=4096=512×8,因而拟把□□□×□设置在大于512×8附近,分以下情形讨论。

(1)取46+□□÷□-512×9=0,则□□÷□=512,不可能实现。

(2)取46+□□÷□-513×8=0,则□□÷□=8,即2位数x为8的倍数。

x=16,24,32,40,48,56,64与80,分别导致数字6,4,3,4,4,6,4,8矛盾。

而对于x=72,有72÷9=8,则可得综合运算式

即得对应式(4)的综合运算式(5)。

【编程拓展】 把数字0,1,2,…,9这10个数字不重复填入以下含加、减、乘、除与乘方的综合运算式中的10个□中,使得该式成立。

约定数字1,0不出现在式左边的一位数中,且0不能为整数首位。试探索并输出所有综合运算式。

1. 设计要点

设综合运算式为

把所有变量设置为整型,其中乘方a^b用a自乘b次实现。

(1)设置枚举循环。

设置a,b,c,d,e,f循环,其中a,b,c,e,f都是一位数,f循环为0~9取值,而a,b,c,e循环为2~9取值;数d为3位数,循环为102~987。

(2)计算数z。

对每一组a,b,c,d,e,f,计算

这样设计,可省略z循环,省略z是否能被c整除,省略等式是否成立的检测。

计算z后,检测z是否为2位数。若计算所得z非2位数,则返回。

(3)判别是否存在重复数字。

然后分别对7个整数进行数字分离,设置g数组对7个整数分离的共10个数字进行统计,g(x)即为数字x(0~9)的频数。

若某一g(x)不为1,不满足10个数字都出现一次且只出现一次,标记t=1。

若所有g(x)全为1,满足数字0,1,2,…,9这10个数字都出现一次且只出现一次,保持标记t=0,则输出所得的优美综合运算式。

2. 程序设计
3. 程序运行示例与变通

我们看到,输出12个完美综合运算式,式中不重复含有0~9这10个数字,设置有加减乘除与乘方五则运算,优雅地展示出数式之美。

以上设计中应用a自乘b次实现a^b,这样处理是简便的。同时,应用g数组进行数字统计来检验是否存在有重复数字,检测手段颇为新颖。

变通:把数字0,1,2,…,9这10个数字分别填入以下含加、减、乘、除与乘方的综合运算式中的10个□中(约定0,1要求同前),请修改以上程序,使得下式成立。

请问:这一综合运算式共有多少种不同的填入法?