歡迎點擊「算法與編程之美」↑關注我們!
本文首發於微信公衆號:"算法與編程之美",歡迎關注,及時瞭解更多此係列文章。
歡迎加入團隊圈子!與作者面對面!直接點擊!
問題描述
小李的店裏專賣其它店中下架的樣品電視機,可稱爲:樣品電視專賣店。其標價都是4位數字(即千元不等),小李爲了標價清晰、方便,使用了預製的類似數碼管的標價籤,只要用顏色筆塗數字就可以了。
圖 1 標價示例
這種價牌有個特點,對一些數字,倒過來看也是合理的數字。如:1 2 5 6 8 9 0 都可以。這樣一來,如果牌子掛倒了,有可能完全變成了另一個價格,比如:1958 倒着掛就是:8561,差了幾千元啊! 當然,多數情況不能倒讀,比如,1110 就不能倒過來,因爲0不能作爲開始數字。有一天,悲劇終於發生了。某個店員不小心把店裏的某兩個價格牌給掛倒了。並且這兩個價格牌的電視機都賣出去了!慶幸的是價格出入不大,其中一個價牌賠了2百多,另一個價牌卻賺了8百多,綜合起來,反而多賺了558元。
請根據這些信息計算:賠錢的那個價牌正確的價格應該是多少?(答案是一個4位的整數,請通過瀏覽器直接提交該數字。注意:不要提交解答過程,或其它輔助說明類的內容。)
解決方案
分析此題,不難發現倒過來合理的數字中只有“6”和“9”顛倒後會改變,而其他的數字不會變,所以問題的考點就在這裏。採用兩個列表來分別存放“0,1,2,5,6,8,9”和顛倒後的“0,1,2,5,9,8,6”,然後再用幾個for循環來找出兩個顛倒的價格,從題目中可以得知一個和原始價格的差對100取模等於2,另一個等於8,根據這兩個條件就很容易找出這兩個價格了,最後再將得到的所有情況做差,選出差爲558的價格,最後就能選出賠錢的原始價代碼示例:
l = ['0','1','2','5','6','8','9'] l1 = ['0','1','2','5','9','8','6'] l2 = [] l3 = [] for a,o in zip(l[1:],l1[1:]): for b,p in zip(l,l1): for c,q in zip(l,l1): for d,r in zip(l,l1): if (int(a+b+c+d)-int(r+q+p+o))//100 == 2: l2.append((a+b+c+d,r+q+p+o)) if (int(r+q+p+o)-int(a+b+c+d))//100 == 8: l3.append((a+b+c+d,r+q+p+o)) for x in l2: for y in l3: if int(y[1])-int(y[0])-(int(x[0])-int(x[1])) == 558: print(x[0]) break |
圖 2 運行效果
END
實習編輯 | 王文星
責 編 | 江來洪
where2go 團隊
微信號:算法與編程之美
長按識別二維碼關注我們!
溫馨提示:點擊頁面右下角“寫留言”發表評論,期待您的參與!期待您的轉發!