| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2802 人关注过本帖, 1 人收藏
标题:求出第N个汉明数
取消只看楼主 加入收藏
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
结帖率:100%
收藏(1)
已结贴  问题点数:100 回复次数:1 
求出第N个汉明数
汉明数,即任意整数 n = 2^i * 3^j * 5^k  ijk为非负整数

fun(1) = (0, 0, 0) = 1
fun(2) = (1, 0, 0) = 2
fun(3) = (0, 1, 0) = 3
fun(4) = (2, 0, 0) = 4
fun(5) = (0, 0, 1) = 5
fun(6) = (1, 1, 0) = 6
fun(7) = (3, 0, 0) = 8
fun(8) = (0, 2, 0) = 9
fun(9) = (1, 0, 1) = 10
fun(10) = (2, 1, 0) = 12
2016-09-30 14:30
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 

程序代码:
def hamming(n):
    s = 1
    import collections
    q2 = collections.deque()
    q3 = collections.deque()
    q5 = collections.deque()
    for x in range(n - 1):
        q2.append(s * 2)
        q3.append(s * 3)
        q5.append(s * 5)
        s = min(q2[0], q3[0], q5[0])
        if q2[0] == s: q2.popleft()
        if q3[0] == s: q3.popleft()
        if q5[0] == s: q5.popleft()
    return s

程序代码:
def hamming(n):
    bases = [2, 3, 5]
    expos = [0, 0, 0]
    hamms = [1]
    for _ in range(1, n):
        next_hamms = [bases[i] * hamms[expos[i]] for i in range(3)]
        next_hamm = min(next_hamms)
        hamms.append(next_hamm)
        for i in range(3):
            expos[i] += int(next_hamms[i] == next_hamm)
    return hamms[-1]


[fly]存在即是合理[/fly]
2016-09-30 16:59
快速回复:求出第N个汉明数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015099 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved