※ 引述《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的話,你的原程式碼按照原有邏輯可以改寫成下面這樣