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