题意:有n个人投色子,并给出了一件情况的成功概率,从第一个人开始投色子,到最后一个人,周期性循环,直到有人完成了目标情况,问第I个人成功的概率是多少。
题解:第I个人成功的概率应该是,第一轮胜利概率k1 + 第二轮胜利的概率k2 + ...直到kn,kn非常小。
#include <stdio.h>
int main() {
int t, n, I;
double p;
scanf("%d", &t);
while (t--) {
scanf("%d%lf%d", &n, &p, &I);
double p1 = 1, res = 0, temp = 1;
for (int i = 1; i <= n; i++)
p1 *= (1 - p);//所有人在一轮中不成功的概率
int k = 0;
while (temp > 1e-9) {
temp = 1;
for (int i = 0; i < k; i++)
temp *= p1;//前k轮全不成功的概率
for (int i = 1; i < I; i++)
temp *= (1 - p);//前I-1个人不成功概率
temp *= p;//第I个人成功概率
res += temp;
k++;
}
printf("%.4lf\n", res);
}
return 0;
}