C/C++の宿題片付けます 153代目

このエントリーをはてなブックマークに追加
859デフォルトの名無しさん
Qのアホさはこれが分かりやすいと思う

641 名前:デフォルトの名無しさん[] 投稿日:2010/05/13(木) 16:05:13
このスレの住民の方には楽勝かもしれませんがお願いします

場合の数を計算するときに、いわゆる「nCr」というものを使うことがある。これは、順番を特に決めない場合、n個のものからr個のものを取り出す場合をいい、
7C5 = 7! / (7-5)!5!
である。nCrであれば
nCr = n! / (n-r)!r! (但し、0≦r≦n)

この数を計算したい。
1. nとrを入力させる。
2. n!を計算させる
3. (n-r)!を計算させる
4. r!を計算させる
5. (2)/(3)/(4)を計算する

しかしn!と(n-r)!がかなりの部分まで重複することを利用すれば、かなり計算の手間を省くことができる
1から5の手順まで守ったプログラムと手間を省いたプログラムをそれぞれ作成しなさい

660 名前: ◆QZaw55cn4c [sage] 投稿日:2010/05/14(金) 00:11:21
>>641
当方の環境は Windows/cygwin、処理系は gcc 3.4.4 です。
http://ideone.com/zrB3A
f1() は定義どおり、f2() は再帰関数(漸化式)を用いました。

661 名前:デフォルトの名無しさん[sage] 投稿日:2010/05/14(金) 00:17:44
題意を把握していないw

662 名前:デフォルトの名無しさん[sage] 投稿日:2010/05/14(金) 00:31:13
>>661
そですかね。掛け算を足し算に変えたんですけど、これってやっぱり「計算の手間を省いた」ことにはならないんですかね。