【蓝桥杯刷题日记】

回文数字

题目描述
观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。
本题要求你找到一些5位或6位的十进制数字。满足如下要求:
该数字的各个数位之和等于输入的整数。

输入一个正整数 n (10< n< 100), 表示要求满足的数位和。
输出若干行,每行包含一个满足要求的5位或6位整数。 数字按从小到大的顺序排列。 如果没有满足条件的,输出:-1

分析

拿到这样的题目,我们可以从两个方面来入手的.

plan A

第一个方面是从这个范围开始,既然题目说的是仅限的五位数和六位数,但是我们直接可以通过循环的1000到100000来找到所有的回文数并与之匹配,附上这方法一的废物的python代码

n = int(input())
flag = False # 判定是否返回 - 1的布尔运算
for i in range(10):
    for j in range(10):
        for k in range(10):
            if (i * 2 + j * 2 + k == n):
                print(i * 10000 + j * 1000 + k * 100 + j * 10 + i)
                flag = True
for i in range(10):
    for j in range(10):
        for k in range(10):
            if (i * 2 + j * 2 + k * 2 == n):
                print(i * 100000 + j * 10000 + k * 1000 + k * 100 + j * 10 + i)
                flag = True
    if flag == False:
        print(-1)

浅显易懂,好耶
在这里插入图片描述

しかし
时间复杂度O(n ^ 3)
这好吗,这不好
所以我们有bear而来。

plan B

我们从的这个n以及回文串的本身来入手,如果这样数字满足的回文的串的话,那么这个数字本身就是就是可以作为一个已知数来代替的。
小二!上优化后的代码

n = int(input())
flag = False
for i in range(1,10):
    for j in range(10):
        k = n - 2 * i - 2 * j
        if k >= 0 and k < 10:
            print(i * 10000 + j * 1000 + k * 100 + j * 10 + i)
            flag = True
for  i in range(1,10):
    for j in range(10):
        k = n - 2 * i - 2 * j
        if (k % 2 == 0 and k // 2 < 10) and k // 2 >= 0:
            print(i * 100000 + j * 10000 + (k//2) * 1000 + (k//2) * 100 + j * 10 + i)
            flag  = True
if flag == False:
    print(-1)

这里理解的难点就在于这样的范围设置,我们的得出的k需要设置在什么样的范围内。首先就是对于五位数而言,我们中间的这样一个k必须要满足中心的k大于的0并且k < 10
对于六位数的数字自然也是同理可以得到,被二整除并且结果要大于0小于10,
嘿嘿
时间复杂度O(n ^ 2)
好耶
最后
附上狗妈的图
DD斩首!!!
斯哈斯哈

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

菜狗原来是我自己

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

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

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

打赏作者

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

抵扣说明:

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

余额充值