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