マジックは、問題のライセンスを供与 - Pythonは達成します

問題の説明

トランプA、2,3 ...... J、Q、K 13枚のスペードの魔術師の手。魔法を実行する前に、マジシャンは、特定の順序の良い(色側のダウンを持っている)プロセスのためのマジックショーでそれらを積み重ねてきた:初め、魔術師数1、その後、カードの上に行くには引き渡さ、スペード、その後、デスクトップ上に置き、2番目は、マジシャン1,2の数、下のカードに最初のカード、2枚目のカードを裏返して、ちょうどスペード2;三度目、魔術師番号1,2,3; 1,2-カードは、これらのカードの底部に変わり、3枚目のカードはわずかスペード3ひっくり返され、......全てまでカードは、これまでに判明している。カードの元の順序はどのように依頼することです。

正しい結果:[1、8、2、5、10、3、12、11、9、4、7、6、13]

ソリューション

1.一覧
def solution_list():
    pokers = [0 for _ in range(13)]         # 初始化
    count = len(pokers)                     # 纸牌总数
    index = -1

    for num in range(1, 14):
        i = 0                               # 计数
        while i < num:
            index = (index + 1) % count     # 索引向前一步(可循环)
            if pokers[index] == 0:          # 当前元素为0时才计数, 不为0则跳过
                i += 1
        pokers[index] = num

    print('#' * 50)
    print(f'\n牌组: {pokers}\n')
    print('#' * 50)
2.ラウンドロビンリスト
class Node:
    """节点"""

    def __init__(self, value):
        self.data = value
        self.next = None

    def __repr__(self):
        return f'Node: {self.data}'


class CircularLinkedList:
    """单循环链表"""
    def __init__(self):
        self.rear = None    # 尾节点

    def is_empty(self):
        return self.rear is None

    def append(self, elem):
        """尾插法"""
        temp = Node(elem)
        if self.rear is None:
            temp.next = temp
            self.rear = temp
        else:
            temp.next = self.rear.next
            self.rear.next = temp
            self.rear = temp
            
    def print_all(self):
        """
        按顺序打印全部节点
        """
        if self.is_empty():
            return
        p = self.rear.next      # 取得头部节点
        print('Head', end='')
        while True:
            print('-->', p.data, end='')
            if p is self.rear:      # 到达尾部停止
                break
            p = p.next
        print('-->Finish')


def solution_circular_linked_list():
    pokers = CircularLinkedList()
    for _ in range(13):
        pokers.append(0)

    temp = pokers.rear
    for num in range(1, 14):
        i = 0
        while i < num:
            temp = temp.next
            if temp.data == 0:
                i += 1
        temp.data = num

    print('#' * 50)
    print('\n牌组: ')
    pokers.print_all()
    print('\n' + '#' * 50)

おすすめ

転載: www.cnblogs.com/thunderLL/p/12072064.html