蓝桥杯 基础练习 特殊回文数 Python (无超时)

123321是一个非常特殊的数,它从左边读和从右边读是一样的。输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式:
输入一行,包含一个正整数n。
输出格式:
按从小到大的顺序输出满足条件的整数,每个整数占一行
输入样例:
在这里给出一组输入。例如:
52
输出样例:
在这里给出相应的输出。例如:
899998
989989
998899

思路:
本题使用Python的话,只能用数学拼凑的方法去实现,效率非常的高,只需几十毫秒!!
这道题用Python使用循环遍历的话,100%会超时,例如这样写:
超时代码:

n= int(input())
i =10000
while i < 1000000:
   if str(i)[::-1] == str(i):
        s = (int(j) for j in str(i))
        if sum(s) == n:
            print(i)
   i+=1

正确写法:

n= int(input())
for i in range(1, 10):
    for j in range(0, 10):
        for k in range(0, 10):
            if (2 * (i + j) + k) == n:
                summ = i * 10001 + j * 1010 + k *100
                print(summ)
for i in range(1, 10):
    for j in range(0, 10):
        for k in range(0, 10):
            if 2 * (i + j + k) == n:
                summ = i * 100001 + j * 10010 +k *1100
                print(summ)

思路来源:

https://blog.csdn.net/cl_cjh/article/details/53397223

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值