トップページに戻る
次のC++のサンプルへ
前のC++のサンプルへ
Problem53 100万を超えるnCr
問題
12345から3つ選ぶ選び方は10通りである.
123, 124, 125, 134, 135, 145, 234, 235, 245, 345
組み合わせでは, 以下の記法を用いてこのことを表す: 5C3 = 10
1 <= n <= 100について, 100万を超えるnCrは何通りか?
ソース
#include <Windows.h>
#include <math.h>
#include <stdio.h>
bool IsOver1000000(int NVal, int RVal)
{
RVal = min(RVal, NVal-RVal);
double ProdVal = 0;
for (int I = NVal; I >= NVal - RVal + 1; I--) {
ProdVal += log10((double)I);
}
for (int I = 2; I <= RVal; I++) {
ProdVal -= log10((double)I);
}
return log10(1000000.0) < ProdVal;
}
void main()
{
int cnt = 0;
for(int N=1;N<=100;N++){
for(int R=1;R<=100;R++){
if (R <= N && IsOver1000000(N,R)){
printf("%d個目は%dC%d\n",++cnt, N, R);
}
}
}
}
実行結果
省略
4071個目は100C92
4072個目は100C93
4073個目は100C94
4074個目は100C95
4075個目は100C96
解説