64,652
社区成员
发帖
与我相关
我的任务
分享
//F games szu
#include <stdio.h>
#include <math.h>
#define N 1000
int StepMul(int n)
{
int i,result=1;
for(i=2;i<=n;++i)
result*=i;
return result;
}
int main()
{
int cases,i,j,len;
int base,top;
int n[N],w[N],c[N];
double win,lose;
double result[N]={0.0};
int temp;
scanf("%d",&cases);
for(i=0;i<cases;++i)
scanf("%d%d%d",&n[i],&w[i],&c[i]);
for(i=0;i<cases;++i)
{
if(w[i]==n[i])
{
result[i]=1-pow(c[i]/100.0,n[i]);
}
else if(w[i]<n[i])
{
len=n[i]-w[i];
temp=w[i];
result[i]+=pow(c[i]/100.0,n[i]);
for(j=0;j<len;++j)
{
top=StepMul(n[i]);
base=(StepMul(temp)*StepMul(n[i]-temp));
win=pow(c[i]/100.0,temp);
lose=pow(1-c[i]/100.0,n[i]-temp);
result[i]+=(top/base)*win*lose;
++temp;
}
result[i]=1-result[i];
}
else
break;
}
for(i=0;i<cases;++i)
printf("%6.4lf\n",result[i]);
return 0;
}
//F games szu
#include <stdio.h>
#include <math.h>
#define N 1000
int StepMul(int n)//求阶成的函数N!
{
int i,result=1;
for(i=2;i<=n;++i)
result*=i;
return result;
}
int main()
{
int cases,i,j,len;
int base,top;//幂的底和指数
int n[N],w[N],c[N];
double win,lose;//代表赢和输的次数
double result[N]={0.0};
int temp;
scanf("%d",&cases);
for(i=0;i<cases;++i)
scanf("%d%d%d",&n[i],&w[i],&c[i]);
for(i=0;i<cases;++i)
{
if(w[i]==n[i])//当总数与至少胜的数目相同的时候,如比赛3场,对方要至少赢3场
{
result[i]=1-pow(c[i]/100.0,n[i]);//我的胜率就是1-对方的胜率
}
else if(w[i]<n[i])//当至少赢的场数小于总数时,如比赛3场,至少赢2场才为胜
{
len=n[i]-w[i];//这是需要加的项数,如3场至少要赢一场,除了3场全胜,还有两项要加
temp=w[i];
result[i]+=pow(c[i]/100.0,n[i]);//先加3场全胜的
for(j=0;j<len;++j) //加其他两项
{
top=StepMul(n[i]);
base=(StepMul(temp)*StepMul(n[i]-temp));
win=pow(c[i]/100.0,temp);
lose=pow(1-c[i]/100.0,n[i]-temp);
result[i]+=(top/base)*win*lose;
++temp;
}
result[i]=1-result[i];
}
else
break;
}
for(i=0;i<cases;++i) //输出
printf("%6.4lf\n",result[i]);
return 0;
}