組み合わせの数の計算をJavaScriptで実現する
n: 個の中から
r: 個を取り出す
組み合わせの公式
- nCr = n × (n -1) × (n -2) × ... × (n -r + 1) / r × (r - 1) × ... × 1
= nPr / r!
= n! / (n - r)!
例
例えば
アメ、チョコ、ガム の3つの選択肢があるとき
2つを取り出して
取り出した順番を見ずに
何と何が取り出されたか
その組み合わせのパターンは
アメ、チョコ = (チョコ、アメ)
アメ、ガム = (ガム 、アメ)
チョコ、ガム = (ガム 、チョコ)
の3パターンある
nPr / r! の計算でやる例
コード1.gs
function combination(){ var n = 5; var r = 2; var numerator = permutation(n, r); var denominator = factorial(r); var result = numerator / denominator; Logger.log(result); } function permutation(n, r) { var result = n; for(var i = 1; i < r; i++){ result = result * (n - i) } return result; } function factorial(target) { var result = 1; for(var i = 0; i < target; i++){ var num = i + 1; result = result * num; } return result; } |
意訳この機能がやること 総数を決める 取り出す数を決める 順列の結果を取得する 階乗の結果を取得する 組み合わせの公式に代入して 結果をログに出す この機能がやること resultの初期値を総数にしておく 取り出す数の分だけ以下を繰り返す resultに result × (総数-i) ログに出す この機能がやること 結果の初期値を1にする 対象の数だけ以下を繰り返す ひとつずつ+1して resultに掛ける 結果をログに出す |
n! / r!(n - r)! の計算でやる例
コード2.gsfunction combination(){ var n = 5; var r = 2; var numerator = factorial(n); var denominator = factorial(r) * factorial(n-r) var result = numerator / denominator; Logger.log(result); } function factorial(target) { var result = 1; for(var i = 0; i < target; i++){ var num = i + 1; result = result * num; } return result; } | 意訳この機能がやること 総数を決める 取り出す数を決める 分子はnの階乗 分母はrの階乗×(n-r)の階乗 分子 / 分母 を計算して ログに出す この機能がやること 結果の初期値を1にする 対象の数だけ以下を繰り返す ひとつずつ+1して resultに掛ける 結果をログに出す |
実行結果はコード1.gs, コード2.gsどちらも 3 になる
HTML Serviceで作る例
コード.gsfunction doGet() { return HtmlService.createHtmlOutputFromFile("index"); } |
index.html<!DOCTYPE html> <html> <body> n:<input id="tb_n"><br> r:<input id="tb_r"><br> <button id="bt">組み合わせの数は</button> <input id="tb_result"> <script> var tb_n = document.getElementById("tb_n"); var tb_r = document.getElementById("tb_r"); var tb_result = document.getElementById("tb_result"); var bt = document.getElementById("bt"); bt.onclick = combination; function combination() { var n = tb_n.value; var r = tb_r.value; var numerator = permutation(n, r); var denominator = factorial(r); var result = numerator / denominator; tb_result.value = result; } function permutation(n, r) { var result = n; for (var i = 1; i < r; i++) { result = result * (n - i) } return result; } function factorial(target) { var result = 1; for (var i = 0; i < target; i++) { var num = i + 1; result = result * num; } return result; } </script> </body> </html> |