順列の数の計算を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
