iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0
SideProject30

UVA題型研究系列 第 13

DAY13:Probability of success

  • 分享至 

  • xImage
  •  

16 UVA10056 What is the Probability?
內容
機率一直是電腦演算法不可或缺的一部分。
在確定性算法無法在短時間內解決問題的地方,概率性算法已應運而生。
在這個問題上,我們不處理任何概率算法。我們將僅嘗試確定某個玩家的獲勝機率。

我們透過類似擲骰子的方式來玩這個遊戲 (他不像普通骰子一樣有六個面)。
如果某個特定事件發生在玩家擲骰子時 (例如獲得數字3,獲得綠色的一面或其他任何東西),則宣佈為獲勝者。

此遊戲可以有N個玩家。
第一個玩家將擲骰子,然後第二個玩家,最後是第N個玩家,再來是第一個玩家,依此類推。
當玩家獲得期望的結果時,宣佈為獲勝者,比賽停止。
您必須確定其中一名 (第i名) 的獲勝機率。

輸入說明
一開始有一個整數S (S ≤ 1000),表示接下來有多少組輸入。
接下來的S行。 每行包含一個整數N (N ≤ 1000),一個浮點數p,一個整數i。
N表示玩家數,p表示一次成功事件發生的機率,i (i ≤ N) 表示要確定獲勝機率的玩家的序列 (序列號碼從1到N)。
(如果成功事件代表獲得數字3,則p是在一次投擲的獲得數字3的機率)。
例如:一個正常骰子,獲得數字3的機率為1/6
輸入不會有不合理的 p 值。

輸出說明
對於每組輸入,輸出第i個玩家獲勝的機率。
機率精確到小數點後四位。

範例輸入 #1
2
2 0.166666 1
2 0.166666 2
範例輸出 #1
0.5455
0.4545

import math # 匯入數學庫以使用數學函數

n = int(input()) # 取得一個整數 n 作為輸入,代表測試案例的數量

for i in range(n): # 遍歷每個測試案例

     n, p, k = map(float, input().split()) # 從輸入取得三個浮點數 n, p, k

     if p == 0: # 如果 p 等於 0,則輸出“0.0000”
         print("0.0000")

     elif k == 1: # 如果 k 等於 1,使用公式計算並輸出結果
         print("{:.4f}".format(p / (1 - math.pow(1-p, n)))) # 計算結果並將結果格式化為小數點後四位

     else: # 否則,使用不同的公式計算並輸出結果
         print("{:.4f}".format(p * math.pow(1-p, k-1) / (1 - math.pow(1-p, n)))) # 計算並將結果格式化 為小數點後四位

上一篇
DAY12:Jolly Jumpers
下一篇
DAY14:Infinite Rooms
系列文
UVA題型研究30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言