dポイントプレゼントキャンペーン実施中!

プログラム初心者です。
visual c++を現在使っていてエングセットの公式について下の式をc++で組み、0.751という値を出したいのですができません。

     (20 C 3 )0.6^3
Pb = ---------------------- =0.751
     3
    Σ ( 20 C k ) 0.6^k
    k=0

Cというのはコンビネーションです。
どなたか教えてください。お願いします。

A 回答 (4件)

#include <stdio.h>


#include <math.h>

int nCr(int n, int r)
{
int ncr, i, j;

for (ncr = i = 1, j = n; i <= r; i++, j--) {
ncr *= j, ncr /= i;
}
return ncr;
}

#include <stdio.h>

int main(void)
{
double sum;
int k;

for (sum = k = 0; k <= 3; ++k) {
sum += nCr(20, k) * pow(0.6, k);
}
printf("%f\n", nCr(20, 3) * pow(0.6, 3) / sum);
return 0;
}
    • good
    • 0
この回答へのお礼

全体のプログラムを作って頂いて本当にありがとうございます!
とてもシンプルでわかりやすいですね。
こちらも是非参考にさせていただきたいと思います。

お礼日時:2009/01/13 17:09

またまた、#1です。



mCn={m×(m-1)×…×(m-n+1)}/{m×(m-1)×…×1}
なので、例えば
comb=1;
for(i=20;i>=(m-n+1);i--){
 comb *= i;
}
for(i=m;i>=1;i--){
 comb /= i;
}
(mとnは設定済みとします。)
で、計算できませんか?
計算の方法は色々有ります。こう書かなければいけないということは有りません。

但し、桁数がとても大きくなる可能性があるときは、変数の桁あふれに注意しましょうね。
    • good
    • 0
この回答へのお礼

ありがとうございます。
コンビネーションの考え方としてとても参考になりました。
こちらを参考にΣ等も含め、プログラミングしたいと思います。

お礼日時:2009/01/13 17:07

#1です。



CとΣを計算するときは、自分で手で計算するときと同じようにします。
Cの計算は、計算式で表せますか?実際は、20の階乗を計算すると桁あふれを起こすかもしれませんから計算方法には注意が必要です。
階乗のように順番に掛け算をするときは、for文で回しましょう。
そして、Σを計算するときも0~3まで回してどんどん加算させればOKでしょう。

実際に自分の手で計算することが出来ないとプログラムにはしづらいですよ。

この回答への補足

Σについては簡単なものなら組んだこともありますしできると思います。
しかしCが計算式でも表せずって感じなので進められません。。
プログラムを良かったら教えていただけないでしょうか。

補足日時:2009/01/09 22:18
    • good
    • 0

補足してください。


・「できません」とは、何ができないの?
(プログラムが組めない、数式が理解できない、数式をプログラムに変換できない…)
・自分では、何処まで出来ているの?

この回答への補足

ごめんなさい。補足です。
数式は理解できるのですが、プログラミングとなるとわからず組めません。
自分ではコンビネーションとシグマがわからず、プログラムに手を出せていない状況です。

補足日時:2009/01/09 21:38
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!