• 蓝桥杯,特殊回文数,Python


    题目

    问题描述
      123321是一个非常特殊的数,它从左边读和从右边读是一样的。
      输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
    输入格式
      输入一行,包含一个正整数n。
    输出格式
      按从小到大的顺序输出满足条件的整数,每个整数占一行。
    样例输入
    52
    样例输出
    899998
    989989
    998899
    数据规模和约定
      1<=n<=54。

    解法一

    我们首先想到的就是遍历所有五位数和六位数,将数字转成字符串再逆转然后判断是否为回文数,接着求各位数字之和判断是否等于n,满足以上两个条件就是答案。

    n = int(input(''))
    for i in range(10000, 1000000):
        num = str(i)
        s = sum(int(j) for j in num)
        if s == n and num == num[::-1]:
            print(num)

    以上代码提交显示运行超时。仔细一想不难发现这里其实是二重循环,因为sum()函数求和过程其实也是一个循环,从而导致算法复杂度增大。下面我们看改进代码:

    n = int(input(''))
    for i in range(10000, 1000000):
        num = str(i)
        if num == num[::-1]:
            if n == sum(int(j) for j in num):
                print(num)

    以上代码显示通过。因为这里的算法复杂度已经降低了很多,我们先判断是否为回文数再来求数字之和,因为满足回文数的数字并不多,因此减少了很多无效的求和运算。

    解法二

    我们采用逆向思维,先保证是回文数再判断数字之和是否等于n。根据回文数左右两边对称的特点,我们可以将五位数到六位数的循环转换成三位数到四位数的循环。

    n = int(input(''))
    x = []
    for i in range(100, 1000):
        if sum(map(int, str(i) + (str(i)[:2])[::-1])) == n:
            x.append(str(i) + (str(i)[:2])[::-1])
        if sum(map(int, str(i) + str(i)[::-1])) == n:
            x.append(str(i) + str(i)[::-1])
    for j in sorted(x):
        print(j)

    以上代码得分只有四十分。我们再看下面的改进代码:

    n = int(input('')) 
    x = []
    for i in range(100, 1000):
        if sum(map(int, str(i) + (str(i)[:2])[::-1])) == n:
            x.append(str(i) + (str(i)[:2])[::-1])
        if sum(map(int, str(i) + str(i)[::-1])) == n:
            x.append(str(i) + str(i)[::-1])
    for j in sorted(map(int, x)):
        print(j)

    我们观察两处代码的差异,其实只在对列表排序的时候将元素转成整型而已,至于为什么会得到不同的结果我想不清楚,如果有知道原因的读者烦请私聊我或者在下面留言。

  • 相关阅读:
    centos6.9安装xampp后报错:egrep: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
    linux如何安装xampp,以及融合dvwa
    CSS的伪元素和伪类
    Font Awesome:图标字体,完全CSS控制
    SoapUI接口测试·第一个HTTP Request接口请求和断言
    Http 四种请求访问代码 HttpGet HttpPost HttpPut HttpDelete .
    Web接口测试工具---Poster与Postman
    WebApi接口传参不再困惑(4):传参详解 一、get请求 二、post请求 三、put请求 四、delete请求 五、总结
    tomcat 禁用不安全的http请求模式 .
    JBOSS的安全配置 .
  • 原文地址:https://www.cnblogs.com/marvin-wen/p/12263073.html
Copyright © 2020-2023  润新知