蓝桥杯2013-Java-A-4颠倒的价牌-Python实现

题干

在这里插入图片描述

  • p1.jpg如下,即颠倒可读。
    在这里插入图片描述

思路

  • 首先因为是填空题,所以不需要刻意考虑时间复杂度,优先考虑枚举。

  • 根据题意我们逐步分析,4位数字,其中1 2 5 6 8 9 0 可颠倒

  • 因为需要可读性,所以首位不能为0,所以枚举{1,2,5,6,8,9,0}中的4位数

  • 由于{1,2,5,8,0}颠倒后,无可读性,故颠倒的方法定义只针对6和9即可(即逢6换9,逢9换6

  • 简单筛选变量temp1temp2,找出赔200多,即[-300:-200];赚800多,即[800:900],满足条件的temp1,2

  • 最后遍历两个集合,检查相加是否为558,打印出来,就可以得出赔钱原价是多少(注意是赔钱的哦!!!)

代码

代码实现基本就着思路来,问题不大

# 定义可读颠倒数字方法:
def swap_cost(n:int):
    if(n==6):return 9
    elif(n==9):return 6
    else:return n
a = [] # 存放赔的(原价,颠倒价,差价)
b = [] # 存在赚的(原价,颠倒价,差价)
sw = {1,2,5,6,8,9,0} # 可颠倒的数字
# 枚举可颠倒的数字,缩小枚举范围
for i in sw:
    for j in sw:
        for m in sw:
            for n in sw:
                if i!=0 and n!=0:
                    temp1 = i*1000+j*100+m*10+n
                    #原价 ijmn
                    temp2 = swap_cost(n)*1000+swap_cost(m)*100+swap_cost(j)*10+swap_cost(i)
                    #颠倒价,注意数字变化的同时还要价位反转 nmji
                    check1 = temp2-temp1
                    #和原价做差
                    if(check1<-200 and check1>-300):
                        a.append((temp1,temp2,check1)) # 以元组形式存放在列表里
                    if(check1<900 and check1>800):
                        b.append((temp1,temp2,check1)) # 以元组形式存放在列表里
# print(a) # 赔
# print(b) # 赚
for i in a:
    for j in b:
        c1 = i[2]
        c2 = j[2]
        #赔赚的数额
        check2 = c1+c2
        if check2==558:print(i,j)
"""
>>
(9088, 8806, -282) (1061, 1901, 840)
(9088, 8806, -282) (2062, 2902, 840)
(9088, 8806, -282) (5065, 5905, 840)
(9088, 8806, -282) (6069, 6909, 840)
(9088, 8806, -282) (8068, 8908, 840)
(9088, 8806, -282) (9066, 9906, 840)
"""

"""正确答案显而易见是:9088"""

总结

简单的位数变换+check检查,需要仔细读题,用时大概15-20分钟吧,思路出来代码就好上手了,继续加油~


有更好的解法,欢迎赐教,小白一枚,一定虚心学习!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Klingx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值