#/*********************************************************** # combinat.rb -- 組合せの数 #***********************************************************/ def comb( n, k) if (k == 0 || k == n); return 1; end # if (k == 1) return n; return comb(n - 1, k - 1) + comb(n - 1, k) end def combination( n, k) a = [] if (n - k < k); k = n - k; end if (k == 0); return 1; end if (k == 1); return n; end if (k > 17); return 0; end # error for i in 1..(n - k); a[i] = i + 2; end for i in 3..(n - k + 1) a[0] = i for j in 1...k; a[j] += a[j - 1]; end end return a[k - 1] end $n = 8 printf("\n k") for k in 0..$n; printf("%6d", k); end printf("\nn ") for k in 0..$n; printf("------"); end printf("\n") for n in 0..$n printf("%d |", n) for k in 0..n; printf("%6d", comb(n, k)); end printf("\n") end printf("\n k") for k in 0..$n; printf("%6d", k); end printf("\nn ") for k in 0..$n; printf("------"); end printf("\n") for n in 0..$n printf("%d |", n) for k in 0..n; printf("%6d", combination(n, k)); end printf("\n") end for k in 0..17 printf("34C%-2d = %10d\n", k, combination(34, k)) end exit 0