資源限制
時間限制:1.0s 記憶體限制:256.0MB
某個抽卡遊戲卡池抽出限定卡的機率為p,該遊戲有一個“井”的機制,抽滿k次卡後直接送這張限定卡。試求獲得這張限定卡需要的期望抽卡次數。輸入為一行,用空格隔開的p和k。輸出為一行,即期望抽卡次數,取2位小數
樣例輸入
0.005 250
樣例輸出
142.88
樣例說明
第1次抽到的機率為0.005
第2次抽到的機率為(1-0.005)*0.005
第n次抽到的機率為(1-0.005)^(n-1)*0.005
第250抽到的機率為之前都沒有抽到的機率,即(1-0.005)^249
最終結果
資料規模和約定
請使用double類型存儲所有浮點數變量
對60%的測試點,保證k≤1000,
對100%的測試點,保證k≤1000000。
如果程式過于低效,在k較大時會因逾時而錯誤。
思路:其實規律就是Math.pow(p,k) 最後保留兩位小數輸出即可。定義一個double類型的方法,直接傳回他們之間的關系。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double p = scanner.nextDouble();
int k = scanner.nextInt();
scanner.close();
double ans = 0;
for (int i = 0; i <= k - 1; i++) {
ans += probability(p, i); // 調用方法
}
ans += k * Math.pow(1 - p, k - 1); // 最後一個不需要添加成功的機率
System.out.printf("%.2f", ans); // 保留兩位輸出
}
public static double probability(double p, double i) {
return i * Math.pow(1 - p, i - 1) * p; // 前面的次數*失敗的機率,加上最後一個成功的機率
}
}