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要求同前),請修改以上程序,使得下式成立。


請問:這一綜合運算式共有多少種不同的填入法?