藍橋杯每日一題(10):顛倒的價格牌(python)

Topic:

小李的店裏專賣其它店中下架的樣品電視機,可稱爲:樣品電視專賣店。
其標價都是4位數字(即千元不等)。
小李爲了標價清晰、方便,使用了預製的類似數碼管的標價籤,只要用顏色筆塗數字就可以了(如圖)。
這種價牌有個特點,對一些數字,倒過來看也是合理的數字。如:1 2 5 6 8 9 0 都可以。這樣一來,如果牌子掛倒了,有可能完全變成了另一個價格,比如:1958 倒着掛就是:8561,差了幾千元啊!!
當然,多數情況不能倒讀,比如,1110 就不能倒過來,因爲0不能作爲開始數字。
有一天,悲劇終於發生了。某個店員不小心把店裏的某兩個價格牌給掛倒了。並且這兩個價格牌的電視機都賣出去了!
慶幸的是價格出入不大,其中一個價牌賠了2百多,另一個價牌卻賺了8百多,綜合起來,反而多賺了558元。
請根據這些信息計算:賠錢的那個價牌正確的價格應該是多少?








Solution:

最開始我認爲這是一個全排列問題
直到最後發現結果錯誤才恍然大悟這不是全排列的問題
首先將原數數列打印出來
只要保證第一位和最後一位都不是0即可滿足條件
之後我運用了雙端隊列進行反轉同時對6和9進行互換
(稍顯複雜,按照位數的數量級反轉即可)
之後將滿足條件的原數、反轉數和差價分別放入get盈利和lost賠的序列中
最後將get序列中的值和lost序列中的值互相相加即爲最後的獲利






Code:

import collections

all_kinds = (1, 2, 5, 6, 8, 9, 0)
all_kinds_1 = []

for i in all_kinds:
    for j in all_kinds:
        for m in all_kinds:
            for n in all_kinds:
                if i != 0 and n != 0:
                    temp = i * 1000 + j * 100 + m * 10 + n
                all_kinds_1.append(temp)

lost = []
get = []

for x in all_kinds_1:
    res = []
    c = str(x)
    rev = collections.deque()

    for y in c:
        if y == '6':
            rev.appendleft('9')
        elif y == '9':
            rev.appendleft('6')
        else:
            rev.appendleft(y)

    rev = list(rev)
    revs = ''.join(rev)
    revs = int(revs)
    spr = revs - x

    if -300 < spr < -200:
        res.append(x)
        res.append(revs)
        res.append(spr)
        lost.append(res)
    elif 800 < spr < 900:
        res.append(x)
        res.append(revs)
        res.append(spr)
        get.append(res)


for d in lost:
    for e in get:
        c1 = d[2]
        c2 = e[2]

        check = c1 + c2
        if check == 558:
            print(d, e)

Answer:
9088

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章