演算法學習(六),演算法學習

來源:互聯網
上載者:User

演算法學習(六),演算法學習
1.Rock Paper Scissors(剪刀 石頭 布)

說明:在電腦科學中有一種特別重要的遊戲,因為它本身很簡單,可以用來建立非常狡猾的人工智慧演算法來對抗人類(或彼此),預測對手的行為。

這個古老的遊戲是在兩個參與者之間進行的,他們同時用他們的手勢——石頭,紙或者剪刀。如果兩人都投了相同的手勢,那一輪就被認為是平局。否則,下列規則適用:

Rock beats Scissors (by blunting them)Scissors beat Paper (by cutting it)Paper beats Rock (by covering it)

通常比賽是在樓梯上玩的。贏得回合的球員向前一步。先到達樓梯盡頭的人是贏家。

你將會得到幾個遊戲的記錄。你要告訴他們誰贏了。

Input data 將包含第一行中播放的匹配數量。然後匹配描述是用單獨的行寫的。

每一行都有幾對字母,比如PR(第一次扔紙,第二次扔石頭),或者是SS(都是剪刀),和空格分開。

Answer 每個匹配的答案應該指定第一個玩家是否獲勝(值1)或秒(值2),沒有平局。

例子:

input data:3SS PRPR RS PS PP SPPS RR PS RPanswer:1 1 2

代碼如下:

 1 condition = [['SS', 'RS', 'PP', 'PP', 'SP', 'PS', 'RP', 'PP', 'RR', 'PP', 'SR', 'PP', 'PS', 'PS'], 2 ['SP', 'RP', 'SS', 'RP', 'PP', 'RS', 'RR', 'RP'], 3 ['PS', 'PR', 'PP', 'RS', 'SS', 'SR', 'SR', 'SP', 'RP', 'RR', 'PP', 'PR', 'SR'], 4 ['SR', 'SP', 'SS', 'SS', 'RR', 'RR', 'SR', 'SR', 'SS', 'RP'], 5 ['SS', 'RR', 'PS', 'PR', 'RS', 'RP', 'PP', 'RP']] 6  7 for i in range(len(condition)): 8     win1 = 0 9     win2 = 010     for n in range(len(condition[i])):11         if condition[i][n][0] == condition[i][n][1]:12             continue13         elif condition[i][n][0] is 'S' and condition[i][n][1] is 'P':14             win1 += 115         elif condition[i][n][0] is 'R' and condition[i][n][1] is 'S':16             win1 += 117         elif condition[i][n][0] is 'P' and condition[i][n][1] is 'R':18             win1 += 119         else:20             win2 += 121     if win1 > win2:22         print('1', end=' ')23     else:24         print('2', end=' ')25 26 輸出:2 2 2 2 2 

  自己的解法不是最優解,可以直接定義 draw = ['SS', 'PP', 'RR]  win1 = ['SP', 'RS', 'PR'] win2 = ['PS, 'SR', RP'] 比較字元在哪個列表中。

 

2.Prime Numbers Generation(求素數)

說明:在這個任務中,我們要實現素數產生器。素數是正整數,除1和它本身之外沒有其他因數。你可以在維基的文章中讀到更多。最流行的演算法是Sieve of EratostheneTrial division

因此,讓我們以升序來建立質數數組(或列表),即

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, ...]

素數不被2, 3 , 5,7 整除。

然後輸出與輸入資料中給定的索引相對應的素數。

Input data 將包含在第一行中列印的素數。

下一行將包含用於列印值的素數數組的索引。它們的範圍從1到20萬不等。

Answer 應該包含與數組中指定位置相對應的素數。

注意,對於這個任務,我們開始從1而不是0開始索引一個數組(這可能協助您檢查您的程式,並有許多可以在網上找到的素數列表)。

input data:47 1 199999 4answer:17 2 2750131 7

代碼如下:

 1 nums = [182894, 136660, 173358, 132410, 199128, 151979, 102865, 180622, 150340, 163151] 2  3 def eladuosai(n): # 厄拉多塞篩法 4     l = list(range(1, n+1)) 5     l[0] = 0 6     for i in range(2, n+1): 7         if l[i-1] != 0: 8             for j in range(i*2, n+1, i): 9                 l[j-1] = 010     result = [x for x in l if x != 0]11     return result12 13 s = eladuosai(3000000)14 for n in nums:15     print(s[n-1], end=' ')16 17 輸出:2497423 1823051 2357119 1761883 2737129 2043817 1340153 2463763 2020181 2207039

  當素數索引位置數很大時,使用厄拉多塞篩法演算法的效率更高。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.