順列の数の計算をJavaScriptで実現する
n: 個の中から
r: 個を取り出す
順列の公式
- nPr = n × (n -1) × (n -2) × ... × (n -r + 1)
= n! / (n - r)!
n個の異なるモノの中からr個を取り出して
取り出した順番で並べる
そのパターンがいくつあるかを計算する
例えば
アメ、チョコ、ガム の3つの選択肢があるとき
2つを取り出して並べるパターンは
アメ、チョコ
アメ、ガム
チョコ、アメ
チョコ、ガム
ガム、アメ
ガム、チョコ
の6パターンある
アメ、チョコ、ガム、キャラメル、グミ、ラムネ、アイス、ケーキの8つの中から6つを取り出すパターンはいくつあるか
nPr = n × (n - 1) × (n - 2) × ... × (n - r + 1) の計算でやる例
コード1.gs
function permutation() { var n = 3; var r = 2; var result = n; for(var i = 1; i < r; i++){ result = result * (n - i) } Logger.log(result); } |
意訳この機能がやること 総数を決める 取り出す数を決める resultの初期値を総数にしておく 取り出す数の分だけ以下を繰り返す resultに result × (総数-i) ログに出す |
nPr = n! / (n - r)! 階乗の計算でやる例
コード2.gsfunction permutation() { var n = 3; var r = 2; var result = n; var numerator = factorial(n); var denominator = 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; } | 意訳この機能がやること 総数を決める 取り出す数を決める resultの初期値を総数にしておく 取り出す数の分だけ以下を繰り返す resultに result × (総数-i) ログに出す この機能がやること 結果の初期値を1にする 対象の数だけ以下を繰り返す ひとつずつ+1して resultに掛ける 結果をログに出す |
実行結果はどちらも 6 になる
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 = permutation; function permutation() { var n = tb_n.value; var r = tb_r.value; var result = n; for(var i = 1; i < r; i++){ result = result * (n-i) } tb_result.value = result; } </script> </body> </html> |
関連記事
JavaScriptで階乗の計算をする
http://www.pre-practice.net/2018/02/javascript_13.html
参考
順列
https://ja.wikipedia.org/wiki/%E9%A0%86%E5%88%97
JavaScriptで階乗の計算をする
http://www.pre-practice.net/2018/02/javascript_13.html
参考
順列
https://ja.wikipedia.org/wiki/%E9%A0%86%E5%88%97