问题描述

小李的店里专卖其它店中下架的样品电视机,可称为:样品电视专卖店。其标价都是4位数字(即千元不等),小李为了标价清晰、方便,使用了预制的类似数码管的标价签,只要用颜色笔涂数字就可以了。 

Python|蓝桥杯-颠倒的价牌_Python

图 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

Python|蓝桥杯-颠倒的价牌_Python_02

图 2 运行效果

END