以下問題節選自《啊哈!演算法》。作者**的傳送門:啊哈磊的官方**,啊哈論壇,
星期天小哼和小哈約在一起玩桌遊, 他們正在玩乙個非常古怪的撲克遊戲——「小貓釣魚」。遊戲的規則是這樣的:將一副撲克牌平均分成兩份,每人拿乙份。小哼先拿出手中的第一張撲克牌放在桌上,然後小哈也拿出手中的第一張撲克牌,並放在小哼剛打出的撲克牌的上面,就像這樣兩人交替出牌。出牌時,如果某人打出的牌與桌上某張牌的牌面相同,即可將兩張相同的牌及其中間所夾的牌全部取走,並依次放到自己手中牌的末尾。當任意一人手中的牌全部出完時,遊戲結束,對手獲勝。假如遊戲開始時,小哼手中有 6 張牌,順序為 2 4 1 2 5 6,小哈手中也有 6 張牌,順序為 3 1 3 5 6 4,最終誰會獲勝呢?現在你可以拿出紙牌來試一試。接下來請你寫乙個程式來自動判斷誰將獲勝。這裡我們做乙個約定,小哼和小哈手中牌的牌面只有 1~9。
python**實現
class solution():
'''棧與佇列共同操作
'''def cat(self, x, y):
#將兩個人手中的牌變成陣列
queue_x = [i for i in x]
queue_y = [i for i in y]
#將桌面變成乙個棧,用來進出操作
stack_table =
#如果列表不為空,則迴圈操作
while len(queue_x) is not 0 and len(queue_y) is not 0:
# 判斷x打出的牌是否在stack_table裡面,如果在裡面,就將兩張牌中間對應的牌加到x裡面
if queue_x[0] in stack_table:
index_x = stack_table.index(queue_x[0])
queue_x.pop(0)
len_x = len(stack_table)
for i in range(len_x - index_x):
stack_table.pop(len_x-i-1)
else:
queue_x.pop(0)
# 判斷y打出的牌是否在stack_table裡面,如果在裡面,就將兩張牌中間對應的牌加到y裡面
if queue_y[0] in stack_table:
index_y = stack_table.index(queue_y[0])
queue_y.pop(0)
len_y = len(stack_table)
for i in range(len_y - index_y):
stack_table.pop(len_y-i-1)
else:
queue_y.pop(0)
if len(queue_x) == 0:
return "啊哈贏了"
if len(queue_y) == 0:
return "嗯哼贏了"
#主函式
if __name__ == "__main__":
a = solution()
print(a.cat('241256', '313564'))
c語言**實現
#include struct queue
;struct stack
; int main()
//小哈手上的6張牌
for(i=1;i<=6;i++)
while(q1.head0) //如果桌上有牌則依次輸出桌上的牌
else
printf("\n桌上已經沒有牌了");
}else
else
printf("\n桌上已經沒有牌了");
}getchar();getchar();
return 0;
}
Python演算法入門 第1章 2,氣泡排序
class solution 氣泡排序 從大到小排序 def maopao self,x 有多少數字,迴圈多少次 for i in range len x 依次讀取列表x裡面的資料,並與下乙個數進行比較 for j in range len x 1 如果小於下乙個數,就將兩個數交換位置 if x j...
python入門 第8章 切片
1 對list進行切片 小結如下 切面最多可以有三個引數,引數之間使用 來分開,如果第乙個引數不寫,表示從第乙個元素開始,如果第二個引數不寫,表示到最後乙個元素 如果第乙個引數和第二個引數都寫了,那麼取值的時候從索引為第乙個引數開始,到第二個引數索引之間取值,不包含第二個索引對應的值 如果第三個引數...
Python入門 第8章 函式
此系列文章的創作初衷是作為讀書過程中的筆記,而非教程類文章。def greet print hello def greetuser name print hello,name.title def greet 顯示簡單的問候語 print hello 乙個良好的 編寫習慣是,在每個函式頭後都用文件字串...