藍橋杯每日一題(5) 馬虎的算式(python)

2021-10-14 12:08:21 字數 1710 閱讀 4072

小明是個急性子,上小學的時候經常把老師寫在黑板上的題目抄錯了。

有一次,老師出的題目是:36 x 495 = ?

他卻給抄成了:396 x 45 = ?

但結果卻很戲劇性,他的答案竟然是對的!!

因為 36 * 495 = 396 * 45 = 17820

類似這樣的巧合情況可能還有很多,比如:27 * 594 = 297 * 54

假設 a b c d e 代表1~9不同的5個數字(注意是各不相同的數字,且不含0)

能滿足形如: ab * cde = adb * ce 這樣的算式一共有多少種呢?

請你利用計算機的優勢尋找所有的可能,並回答不同算式的種類數。

滿足乘法交換律的算式計為不同的種類,所以答案肯定是個偶數。

直接暴力解法

將a, b, c, d. e按照0 — 9 全部排列出來

加上篩選條件:

(1)a, b, c, d, e均表示不同數字(不相等)

(2)滿足 ab * cde = adb * ce 這樣的算式(按照位數乘10的n次方)

滿足兩項條件的結果res + 1

res =

0for a in

range(1

,10):

for b in

range(1

,10):

for c in

range(1

,10):

for d in

range(1

,10):

for e in

range(1

,10):

if a != b and a != c and a != d and a != e and b != c and b != d and b != e and c != d and c != e \

and d != e and

(a *

10+ b)

*(c *

100+ d *

10+ e)

==(a *

100+ d *

10+ b)*(

c *10+ e)

: res +=

1print

(res)

運用itertools模組進行簡化

首先運用permutations所有元素排列出5位數字全排列的所有可能情況

之後如果滿足 ab * cde = adb * ce 這樣的算式(按照位數乘10的n次方)

就讓res += 1

import itertools

res =

0x = itertools.permutations(

[i for i in

range(1

,10)]

,5)for j in x:

if(j[0]

*10+ j[1]

)*(j[2]*

100+ j[3]

*10+j [4]

)==(j[0]*

100+ j[3]

*10+ j[1]

)*(10

* j[2]

+ j[4]

):res +=

1print

(res)

藍橋杯 馬虎的算式

小明是個急性子,上小學的時候經常把老師寫在黑板上的題目抄錯了。有一次,老師出的題目是 36 x 495 他卻給抄成了 396 x 45 但結果卻很戲劇性,他的答案竟然是對的!因為 36 495 396 45 17820 類似這樣的巧合情況可能還有很多,比如 27 594 297 54 假設 a b ...

藍橋杯 馬虎的算式

題目描述 小明是個急性子,上小學的時候經常把老師寫在黑板上的題目抄錯了。有一次,老師出的題目是 36 x 495 他卻給抄成了 396 x 45 但結果卻很戲劇性,他的答案竟然是對的!因為 36 495 396 45 17820 類似這樣的巧合情況可能還有很多,比如 27 594 297 54 假設...

藍橋杯歷屆真題 馬虎的算式

小明是個急性子,上小學的時候經常把老師寫在黑板上的題目抄錯了。有一次,老師出的題目是 36 x 495 他卻給抄成了 396 x 45 但結果卻很戲劇性,他的答案竟然是對的!因為 36 495 396 45 17820 類似這樣的巧合情況可能還有很多,比如 27 594 297 54 假設 a b ...