zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    C# Enum转换
    Split
    WCF访问安全
    [转] 检索 COM 类工厂中 CLSID 为 {000209FF00000000C000000000000046} 的组件时失败
    ICSharpCode.SharpZipLib.dll压缩的zip包,7zip解压时出错
    js控制ctrl+p
    跨域访问WCF问题
    sql:过滤字段中是否包含数字
    序列化/反序化
    [转]RegistryKey 操作注册表
  • 原文地址:https://www.cnblogs.com/fly-book/p/11697346.html
Copyright © 2011-2022 走看看