• 02.list--约瑟夫环


    from fib import fib  # 参考01.线性表
    
    
    def josephus_a(n, k, m):
        """
        约瑟夫环 没有人用0表示,n个人出列即结束
        :param n: 包含n个人
        :param k: 找到第k个人,从那里开始
        :param m: 数m个人(在坐的),遇到表的末端就转回下标0继续,把表示第m个人的元素修改为0
        :return:
        """
        people = list(range(1, n + 1))
        i = k - 1  # i表示数组下标
        for num in range(n):
            count = 0
            while count < m:
                if people[i] > 0:
                    count += 1
                if count == m:
                    print(people[i], end='')
                    people[i] = 0
                i = (i + 1) % n
            if num < n - 1:
                print(", ", end='')
            else:
                print('')
        return
    
    
    def josephus_l(n, k, m):
        """
        约瑟夫环: 退出的人从表中删除
        :param n:
        :param k:
        :param m:
        :return:
        """
        people = list(range(1, n + 1))
        i = k - 1
        # num逐渐-1
        for num in range(n, 0, -1):
            i = (i + m - 1) % num
            print(people.pop(i), end=(", " if num > 1 else "
    "))
        return
    
    
    class LCList(object):
        pass
    
    
    class Josephus(fib.LCList):
        """基于循环单链表"""
        def turn(self, m):
            """跳转"""
            for i in range(m):
                self._rear = self._rear.next
    
        def __init__(self, n, k, m):
            """
            :param n: 包含n个人
            :param k: 找到第k个人,从那里开始
            :param m: 数m个人
            """
            super(Josephus, self).__init__()
            # 添加数据1~n
            for i in range(1, n + 1):
                self.append(i)
            # 从k-1开始位置
            self.turn(k - 1)
            while not self.is_empty():
                self.turn(m - 1)
                print(self.pop(), end=("
    " if self.is_empty() else ", "))
    
    
    if __name__ == '__main__':
        josephus_a(5, 1, 2)
        josephus_l(5, 1, 2)
        Josephus(5, 1, 2)
  • 相关阅读:
    Kafka架构
    MapReduce执行流程解析
    ZooKeeper选举机制
    Zookeeper全局一致性
    HDFS的快照
    在CentOS 6.5上安装NodeJS
    Node v0.12.5 稳定版发布
    CentOS6.5手动升级gcc4.8.2
    centos6 yum 安装 install c++4.8 gcc4.8
    Linux CentOS6系统安装最新版本Node.js环境及相关文件配置
  • 原文地址:https://www.cnblogs.com/fly-book/p/11697346.html
Copyright © 2020-2023  润新知