演算法學習(六)

来源:http://www.cnblogs.com/zt19994/archive/2017/08/17/7383972.html
-Advertisement-
Play Games

1.Rock Paper Scissors(剪刀 石頭 布) 說明:在電腦科學中有一種特別重要的游戲,因為它本身很簡單,可以用來創建非常狡猾的人工智慧演算法來對抗人類(或彼此),預測對手的行為。 這個古老的游戲是在兩個參與者之間進行的,他們同時用他們的手勢——石頭,紙或者剪刀。如果兩人都投了相同的手 ...


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:
3
SS PR
PR RS PS PP SP
PS RR PS RP

answer:
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 = 0
10     for n in range(len(condition[i])):
11         if condition[i][n][0] == condition[i][n][1]:
12             continue
13         elif condition[i][n][0] is 'S' and condition[i][n][1] is 'P':
14             win1 += 1
15         elif condition[i][n][0] is 'R' and condition[i][n][1] is 'S':
16             win1 += 1
17         elif condition[i][n][0] is 'P' and condition[i][n][1] is 'R':
18             win1 += 1
19         else:
20             win2 += 1
21     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:
4
7 1 199999 4

answer:
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] = 0
10     result = [x for x in l if x != 0]
11     return result
12 
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

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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 0x00: 首先聲明一個全局變數。 然後,在滑動處罰ajax請求的代碼處,做一個判斷。 if (control) { $('.get_more').click(); }; 這個地方是獲取數據的函數以及ajax請求的函數 0x01以上原理: 首先聲明一個全局變數設置為true,在觸發滑動時間的時候,判 ...
  • 使用過HttpServlet的都應該用過其doGet和doPost方法,接下來看看DispatcherServlet對這兩個方法的實現(源碼在DispatcherServlet的父類FrameworkServlet中): 方法里又將邏輯交由processRequest(request, respon ...
  • 題目描述 Copy從盧牛那裡聽說在一片叫yz的神的領域埋藏著不少寶藏,於是Copy來到了這個被劃分為個區域的神地。盧牛告訴了Copy這裡共有個寶藏,分別放在第Pi個(1<=Pi<=N)區域。Copy還得知了每個區域之間的距離。現在Copy從1號區域出發,要獲得所有的寶藏併到n號區域離開。Copy很懶 ...
  • 想挖個坑督促自己練技術,有時候想到一個項目,大概想了一些要實現的功能,怎麼實現。現在覺得自己差不多能完成QQ空間的主要功能了。準備立個牌坊,寫一個類似功能的網站。並且把進度放到這裡來。 初步計劃實現以下功能 1、用戶註冊、登錄、信息修改; 2、用戶進行好友關註、推送好用動態; 3、發表日誌、評論和評 ...
  • 目錄 題目描述 思路 程式(C++版&java版) 詳解 題目描述: 思路: 這道題實在是太經典,一道題裡面考察了幾個知識點: 1.鏈表是否有環的判斷 2.鏈表若有環,要找到環的入口節點 3.兩個鏈表的多種情況分析 另外,左老師講得實在是太贊了. 程式(詳解在後面): 詳解 先把幾種情況羅列一下: ...
  • 附圖一張: 今天閑來無事做,就想起同程SRC有一個公開漏洞模塊。然而閑的蛋疼的我就有了對其寫一個爬蟲將漏洞列表爬下來的衝動。有兩個版本,一個是單線程的。另一個是多線程的版本。 單線程版本: 多線程版本: 多線程使用的是Threading+Queue #coding=utf-8 import requ ...
  • 二、初識C語言 編程語言有很多種,主要分為三大類,分別是機器語言、彙編語言、高級語言。電腦只能識別和理解二進位代碼,也就是0和1。想一下,用機器語言來開發,我們得記住多少用0和1兩個數字所組成的指令代碼以及其代碼涵義?顯然,這是不合理的,這樣的編程枯燥且繁瑣費力,也容易出錯。彙編語言應運而生,彙編 ...
  • os模塊調用操作系統介面的模塊 相關方法或屬性: getcwd() 獲取當前的操作目錄,等同於linux中的pwd命令。 調用:os.getcwd() chdir() 改變python腳本的工作目錄。 調用:os.chdir(path) (path以字元串形式傳入) 例如: curdir 當前目錄 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...