魔術師發牌問題 python實現

2021-10-01 14:39:41 字數 2131 閱讀 6144

魔術師手中有a、2、3……j、q、k十三張黑桃撲克牌。在表演魔術前,魔術師已經將他們按照一定的順序疊放好(有花色的一面朝下).魔術表演過程為:一開始,魔術師數1,然後把最上面的那張牌翻過來,是黑桃a;然後將其放到桌面上;第二次,魔術師數1、2;將第一張牌放到這些牌的最下面,將第二張牌翻轉過來,正好是黑桃2;第三次,魔術師數1、2、3;將第1、2張牌依次放到這些牌的最下面,將第三張牌翻過來正好是黑桃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牌組: \n')

print('#' * 50)

2. 單迴圈鍊錶

class node:

"""節點"""

def __init__(self, value):

self.data = value

self.next = none

def __repr__(self):

return f'node: '

class circularlinkedlist:

"""單迴圈鍊錶"""

def __init__(self):

self.rear = none # 尾節點

def is_empty(self):

return self.rear is none

"""尾插法"""

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):

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)

魔術師發牌問題

說有乙個魔術師,他表演發牌的魔術,他將十三張黑桃牌放在一堆。然後開始數數,第一次,他數1,然後翻開第一張,果然是黑桃a,然後將黑桃a放到牌堆外。然後魔術師繼續數數,這次他數1,2,然後將數1的牌放到牌堆底,然後將數2的牌翻開,果然是黑桃2,然後將黑桃2放到一邊。繼續數1,2,3,果然每次都是對應的牌...

魔術師發牌問題

先搞清楚題意 注意按順序每翻到一張牌放到桌子上,不在手中了,其實是迴圈鍊錶的問題,可以在紙上模擬一下就可以得到牌開始的順序。1 一開始寫的比較麻煩 用兩個迴圈鍊錶,乙個放數字,乙個放序號,邊構造邊刪除,因為翻出來的牌已經放在一邊不在手上了,再用乙個card陣列存放開始的牌的順序。include st...

魔術師發牌問題

問題描述 魔術師手中有a 2 3 j q k十三張黑桃撲克牌。在表演魔術前,魔術師已經將他們按照一定的順序疊放好,有花色的一面朝下。魔術表演過程為 一開始,魔術師數1,然後把最上面的那張牌翻過來,是黑桃a 然後將其放到桌面上 第二次,魔術師數1 2 將第一張牌放到這些牌的最下面,將第二張牌翻轉過來,...