• 最接近的数字


    本题目从如下链接看到:

    https://blog.csdn.net/svitter/article/details/78490322

    原文作者也提供了解题思路

    题目

    一个K位的数N 

     
    (K2000N1020)


    找出一个比N大且最接近的数,这个数的每位之和与N相同,用代码实现之。

    例如:数 50 每位数之和是 5,

             与50最接近的数是 104,

             104 每位数之后也是 5;

              112 所求数为121;

              8 -> 17

              10 -> 100

              91 -> 118

              1999000  -> 2000899

              29399 -> 29489

    本题的难点是, 数据的位数,可以达到1000多位,

    这就直接否决了,用数字逐个遍历的解法.

    突破点是, 最接近的数, 而且还要比给定的数大.

    所以, 广泛的情况是,    高位数 +1, 低位数-1,  这样 得出来的数 肯定 就是  位数之和是相等的

    但 特别的情况 是像 50  19 的情况

    # 需要计算的数字列表
    calc_list = [1, 0, 0, 9]
    # 打印 计算的数字列表的和
    print(sum(calc_list))
    
    # 倒序遍历数字列表
    # 第 i 位 -1
    # 第 i-1 位 +1
    
    for i in range(len(calc_list)-1, -1, -1):
        ir0 = calc_list[i] - 1
    
        if i-1 >= 0:
            ir1 = calc_list[i-1] + 1
            # 如果 i 位 -1 和 i+1 位 +1, 都满足条件时,
            # 则找到数据
            if 0 < ir0 < 10 and 0 < ir1 < 10:
                calc_list[i] = ir0
                calc_list[i-1] = ir1
                # 特殊情况, 如果是最高位符合条件
                # 因为要找大于目标数的最接近的数
                # 所以,在最高位+1的情况下, 后续位数,可以按从小到大重新排列
                if i - 1 == 0:
                    l2 = calc_list[1:]
                    l2.sort()
                    calc_list[1:] = l2
                break
        else:
            # 原最高位 -1
            calc_list[i] = ir0
            # 增加1位最高位,为1的
            calc_list.insert(0, 1)
            # 在最高位为1的情况下, 后续数字列表进行从小到大排序
            l2 = calc_list[1:]
            l2.sort()
            calc_list[1:] = l2
    
    # 结果数字列表
    # 打印被计算出来的数字列表
    print(calc_list)
    # 打印被计算出来的数字列表的和
    print(sum(calc_list))
    View Code

     如上代码的 核心处理就是, 高位+1, 低位-1.

    测试了部分特殊数据,都是 正确的,

    但不能保证,是否适用所有数据.

  • 相关阅读:
    SQL SERVER导入Excel csv
    微信付款码扫码枪支付
    idftp
    不正常地定义参数对象。提供了不一致或不完整的信息
    sql 日志文件截断收缩
    sql server 新语法 收藏
    SQL SERVER 2019新功能
    SQL SERVER 死锁
    rad 10.2
    TXMLDocument 创建空值节点不要缩写
  • 原文地址:https://www.cnblogs.com/golzn2018/p/9544765.html
Copyright © 2020-2023  润新知