蓝桥杯每日一题(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

猜你喜欢

转载自blog.csdn.net/weixin_50791900/article/details/112725809
今日推荐