满足泊(bo)松分布,用公式计算一下和就行了,注意求阶乘那里要用double,否则会溢出。
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int n;
double q;
double f(int k)
{
if(k == 0)
return 1;
return k * f(k - 1);
}
double getP(int k)
{
return pow(q, k) * exp(-q) / f(k);
}
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
scanf("%d%lf", &n, &q);
double sum = 0.0;
for(int i = 0; i <= n; i++)
sum += getP(i);
printf("%.3lf\n", sum);
}
return 0;
}