![趣味数学及编程拓展](https://wfqqreader-1252317822.image.myqcloud.com/cover/947/25456947/b_25456947.jpg)
3.5 优美综合运算式
本节创新构建隐序四则运算式及综合运算数学式,这是一个有趣也有难度的填数游戏。
各数学式称为“优美”,是指各个数字在式中不重复,是和谐美的具体体现。
3.5.1 隐序四则运算式
本节所论述的数式除了含四则运算与数字不重复外,还必须符合指定隐序。这一新增要求是新颖的,也是有趣的。
把数字0,1,2,…,9这10个数字不重复填入以下含加、减、乘、除(乘除运算优先于加减运算)的四则运算式中的10个□中,使得下式成立。
![](https://epubservercos.yuewen.com/482E6E/13908177405514206/epubprivate/OEBPS/Images/Figure-P99_9352.jpg?sign=1738927902-2636pSNZVk7PhyTHXdOIzU0g09RJvApG-0-d13e6eb78dc92ab08ccb434b54de24af)
约定式(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,即四则运算式为
![](https://epubservercos.yuewen.com/482E6E/13908177405514206/epubprivate/OEBPS/Images/Figure-P99_9354.jpg?sign=1738927902-2iM3f08ljSMnsLgmxCbje0xBxKv4beqO-0-b3079457beed35102941aedaf105da69)
同时设置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。
把以上四则运算式变形为以下的乘积式是简便的。
![](https://epubservercos.yuewen.com/482E6E/13908177405514206/epubprivate/OEBPS/Images/Figure-P100_9356.jpg?sign=1738927902-aZckrrsvCWcJsJNhBIWHa4RI76opB7qB-0-20daf360b6ed78b9c5acfec0adda6a1f)
对每一组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. 程序设计
![](https://epubservercos.yuewen.com/482E6E/13908177405514206/epubprivate/OEBPS/Images/Figure-P100_1806.jpg?sign=1738927902-2uNAyxhSidzBaeKBYbX0VnCmqe9UW5tR-0-799463afc4455347af9eb2835d6cbe92)
3. 程序运行示例与说明
![](https://epubservercos.yuewen.com/482E6E/13908177405514206/epubprivate/OEBPS/Images/Figure-P101_9358.jpg?sign=1738927902-fVW8j5lRW1asFiRDpqJaLMK1W1HXTEaJ-0-eba21e88907da081d5a333f03e307770)
从运行结果中清楚可见,每个式中的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个□中,使得该式成立。
![](https://epubservercos.yuewen.com/482E6E/13908177405514206/epubprivate/OEBPS/Images/Figure-P102_9360.jpg?sign=1738927902-xphySNJDDkWboDaTze2oxRiu7E8UfFHm-0-b3ed08d9a3a161bf53375eb1fda5928c)
约定数字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,则可得综合运算式
![](https://epubservercos.yuewen.com/482E6E/13908177405514206/epubprivate/OEBPS/Images/Figure-P102_9362.jpg?sign=1738927902-9FBu5JtQW4oG0BIIoeLBffFBmTTPeVDn-0-df73533f319ba69ebb14bf34ab1fc349)
即得对应式(4)的综合运算式(5)。
【编程拓展】 把数字0,1,2,…,9这10个数字不重复填入以下含加、减、乘、除与乘方的综合运算式中的10个□中,使得该式成立。
![](https://epubservercos.yuewen.com/482E6E/13908177405514206/epubprivate/OEBPS/Images/Figure-P102_9364.jpg?sign=1738927902-zAmJgNsxSI1jQDudGYB3zbzLFJSKIsD9-0-2dac05613abf1ef8f5b59315b9b25554)
约定数字1,0不出现在式左边的一位数中,且0不能为整数首位。试探索并输出所有综合运算式。
1. 设计要点
设综合运算式为
![](https://epubservercos.yuewen.com/482E6E/13908177405514206/epubprivate/OEBPS/Images/Figure-P102_9366.jpg?sign=1738927902-INIqka6fIf6q4D1DCMu8IXq5Wiz9XMNB-0-74390674b7f3c5610a1dcf4dec949c36)
把所有变量设置为整型,其中乘方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,计算
![](https://epubservercos.yuewen.com/482E6E/13908177405514206/epubprivate/OEBPS/Images/Figure-P102_9368.jpg?sign=1738927902-hlSMIRDzqNSdf1vcKYkPVkZR3EbVzG8D-0-0823d82de4dee3afb99e1bf7e560f6b2)
这样设计,可省略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. 程序设计
![](https://epubservercos.yuewen.com/482E6E/13908177405514206/epubprivate/OEBPS/Images/Figure-P103_1830.jpg?sign=1738927902-UalE1gmNQZVR9EaYNPAnyNKNw4dbtgtX-0-0abde6934da855a13879113e9cd1941d)
3. 程序运行示例与变通
![](https://epubservercos.yuewen.com/482E6E/13908177405514206/epubprivate/OEBPS/Images/Figure-P103_9370.jpg?sign=1738927902-6ttARtaUDi92NRxx4c5MUWMuxWzYkSXQ-0-1dba7b19f57bd48a08cb63e0d6f32ba5)
我们看到,输出12个完美综合运算式,式中不重复含有0~9这10个数字,设置有加减乘除与乘方五则运算,优雅地展示出数式之美。
以上设计中应用a自乘b次实现a^b,这样处理是简便的。同时,应用g数组进行数字统计来检验是否存在有重复数字,检测手段颇为新颖。
变通:把数字0,1,2,…,9这10个数字分别填入以下含加、减、乘、除与乘方的综合运算式中的10个□中(约定0,1要求同前),请修改以上程序,使得下式成立。
![](https://epubservercos.yuewen.com/482E6E/13908177405514206/epubprivate/OEBPS/Images/Figure-P104_9373.jpg?sign=1738927902-mLO40LNZQMJ4TJ09Jb6FBFSHxUwcHr4J-0-bdc8aca29c0bebc98bcab8916416f333)
![](https://epubservercos.yuewen.com/482E6E/13908177405514206/epubprivate/OEBPS/Images/Figure-P104_9374.jpg?sign=1738927902-tQdxtZnx4Ltg4sq9ukEBQBfQYq7jZZM5-0-ae7e0ace7afa0854a1639e86c3e7d168)
请问:这一综合运算式共有多少种不同的填入法?