链接:点击打开链接
题意:有n个数,每次等概率选择一个数,如果选到正数则花费这个正数的值直接结束,否则选择负数的话,则花费负数的绝对值病继续选择,问游戏结束的费用的期望
代码:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
int a[105];
int gcd(int a,int b){
if(b==0)
return a;
return gcd(b,a%b);
}
int main(){ //设期望为D,p1为选到正数的概率,p2为选到负数的概率
int t,n,i,j,cas,sum,num; //x1为正数的平均值,x2为负数的平均值
scanf("%d",&t); //num1为正数的出现次数,num2为负数的出现次数
for(cas=1;cas<=t;cas++){ //则D=p1*x1+p2*x2+p2*D
scanf("%d",&n); //p1*D=p1*x1+p2*x2
num=sum=0; //num1*D=num1*x1+num2*x2
for(i=1;i<=n;i++){ //D=Σai/num1
scanf("%d",&a[i]);
sum+=abs(a[i]);
if(a[i]>=0)
num++;
}
if(num==0)
printf("Case %d: inf\n",cas);
else
printf("Case %d: %d/%d\n",cas,sum/gcd(sum,num),num/gcd(sum,num));
}
return 0;
}