※ 引述《fragmentwing (片翼碎梦)》之铭言:
: 原本想说要用log去算,发现超不准,只好直接算了
: 怕超过2*32次,就用10次和0.1的机率去算了
: 至少一次的机率==一次+两次+...+N(抽的总次数)次
: 以下程式码,才正式学C不到10天,请鞭小力点
:
: #include<stdio.h>
: #include<math.h>
: int cntnis(int a,int b){
: int top=1,bottom=1;
: for(int i=1;i<=b;i++){
: top*=(a-i+1);
: bottom*=i;
: }
:
: int compute=top/bottom;
: return compute;
: }
:
: double multi(double have,int havet,int nohavet){
: double result=pow(have,havet)*pow((1.0-have),nohavet);
: return result;
: }
:
: int main(){
: int times,cntn,i;
: double haveis,mulh,probability,expectation=0;
:
: times=10;
: haveis=0.1;
:
: for(i=1;i<=times;i++){
: cntn=cntnis(times,i);
: mulh=multi(haveis,i,times-i);
: probability=cntn*mulh;
: printf("抽 %d 次中,抽中 %d 张的机率= %lf\n",times,i,probability);
: expectation+=probability*i;
: }
:
: printf("抽 %d 次,机率 %.3lf 期望值为: %lf",times,haveis,expectation);
:
: return 0;
: }
用Python的话,你的原程式码按照原有逻辑可以改写成下面这样