博客
关于我
七月十一日训练总结
阅读量:277 次
发布时间:2019-03-01

本文共 1907 字,大约阅读时间需要 6 分钟。

为了解决这个问题,我们需要找到一个最小的整数 ( m ),使得 ( m ) 是“好”数,并且 ( m \geq n )。一个“好”数可以表示为不重复的3的幂次方的和。为了高效地解决这个问题,我们可以利用三进制数的特性来处理。

方法思路

  • 转换为三进制:首先将给定的整数 ( n ) 转换为三进制表示。
  • 处理进位:在三进制表示中,任何数字2都会导致我们需要进位处理。如果我们遇到数字2,我们将其和后面的所有0一起处理,将它们设为0,并将前面的位加1。
  • 处理进位的影响:可能会有多个连续的2,这会导致更高位的进位。我们需要继续处理这些进位,直到所有位都被正确处理。
  • 转换为十进制:处理完三进制数组后,将其转换回十进制,得到最终的结果 ( m )。
  • 解决代码

    def find_good_number(n):    if n == 0:        return 0    # 转换为三进制数组,高位在前    num = []    while n > 0:        num.insert(0, n % 3)        n = n // 3    # 处理数组中的2    i = len(num) - 1    while i >= 0:        if num[i] == 2:            # 找到最长的连续2            j = i            while j < len(num) and num[j] == 2:                j += 1            # 设为0            for k in range(i, j):                num[k] = 0            # 如果j > i,说明后面还有2吗?不,因为已经处理i位置的2            if j > i:                j -= 1            else:                j = i            # 找到最大的k < i,使得num[k] != 0            k = i - 1            while k >= 0 and num[k] == 0:                k -= 1            if k < 0:                # 添加1在最高位                num = [1] + num            else:                num[k] += 1                # 处理进位                while num[k] > 2:                    num[k] = 0                    carry = 1                    k -= 1                    if k < 0:                        num = [1] + num                        break                    num[k] += carry                    carry = num[k] // 3                    num[k] = num[k] % 3            # 继续处理可能的进位带来的2,重新从左到右遍历            i = 0            break        else:            i -= 1    # 转换为十进制    m = 0    for digit in num:        m = m * 3 + digit    return mq = int(input())for _ in range(q):    n = int(input())    print(find_good_number(n))

    代码解释

  • 转换为三进制:将整数 ( n ) 转换为三进制数组,高位在前。
  • 处理进位:从右到左遍历数组,遇到数字2时,处理连续的2,并进行进位处理。
  • 处理进位的影响:在处理进位时,可能会导致更高位的进位,因此需要继续处理,直到所有位都被正确处理。
  • 转换为十进制:将处理完的三进制数组转换为十进制数,得到结果 ( m )。
  • 这个方法确保了我们能够高效地找到满足条件的最小“好”数 ( m )。

    转载地址:http://wroo.baihongyu.com/

    你可能感兴趣的文章
    R2学习记录
    查看>>
    PHP获取本周的每一天的时间
    查看>>
    php获取用户真实IP和防刷机制
    查看>>
    php获取网页内容的三种方法
    查看>>
    R-CNN算法优化策略
    查看>>
    PHP规范PSR0和PSR4的理解
    查看>>
    php解析ipa包,获取logo
    查看>>
    R&Rstudio安装各种包
    查看>>
    php设置cookie,在js中如何获取
    查看>>
    php设置socket超时时间
    查看>>
    php设计模式 萨莱 pdf,PHP设计模式 建造者模式
    查看>>
    PHP设计模式之----观察者模式
    查看>>
    php设计模式之装饰器模式
    查看>>
    R&Python Data Science系列:数据处理(5)--字符串函数基于R(一)
    查看>>
    PHP设计模式:观察者模式
    查看>>
    php访问mysql(1)
    查看>>
    php详细学习1
    查看>>
    php语言优劣
    查看>>
    PHP语言最优雅的支付SDK扩展包
    查看>>
    PHP请求https域名发生segment fault段错误
    查看>>