Помогите перевести код с с++ на js
Здравствуйте есть код на c++ не знаю как перевести его в Javascript нужно чтобы N передавалось из html
Код:
#include <iostream> |
Код - срань.
function swap(a, i, j) { var s = a[i]; a[i] = a[j]; a[j] = s; } function NextSet(a, n) { var j = n - 2; while (j != -1 && a[j] >= a[j + 1]) { j--; } if (j == -1) { return false; } var k = n - 1; while (a[j] >= a[k]) { k--; } swap(a, j, k); var l = j + 1, r = n - 1; // сортируем оставшуюся часть последовательности while (l < r) { swap(a, l++, r--); } return true; } // вывод перестановки function Print() { var num = 1; // номер перестановки return function (a, n) { var message = num++ + ': '; for (var i = 0; i < n; i++) { message += a[i] + ' '; } console.log(message); }; } var n = prompt('N = '), a = []; for (var i = 0; i < n; i++) { a[i] = i + 1; } var log = Print(); log(a, n); while (NextSet(a, n)) { log(a, n); } Результат смотрите в консоли. |
Можете пожалуйста привязать работу данного скрипта к этому html документу?
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>Перестановки.</title> <link rel="stylesheet" href="style.css" > </head> <body> <h1>Перестановки.</h1> <div> <input id="b1" name="input" type="button" value="Все перестановки из" onclick=""> <input id="number" style="width: 15px;" name="input" type="text" maxlength="1"> элементов. </div> <div id="res" style="text-align: left"></div> <script></script> </body> </html> |
можно узнать еще почему при вводе 0 начинается бесконечный цикл
|
перестановка
Gaara_sand1,
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>Перестановки.</title> <link rel="stylesheet" href="style.css" > </head> <body> <h1>Перестановки.</h1> <div> <input id="b1" name="input" type="button" value="Все перестановки из" > <input id="number" style="width: 15px;" name="input" type="text" maxlength="1" value="4"> элементов. </div> <div id="res" style="text-align: left"></div> <script> function perms(xs){ var r=[]; for (var i=0;i<xs.length;i++){ var xs_ = xs.slice(), x = xs_.splice(i, 1), ps = xs_.length ? perms(xs_) : [[]]; r.push(...ps.map(p=>x.concat(p))); } return r; } b1.addEventListener("click" , function(event) { var length = number.value = +number.value||0; var arr = Array.from({length}, (_, i) => ++i); arr = perms(arr); res.innerHTML = `${arr.join("<br>")}<br>Всего: ${arr.length}` }); </script> </body> </html> |
рони,
можете пожалуйста объяснить как работает данная функция и можно ли сделать чтобы при введении нуля выдавало просто "Всего:0" |
Цитата:
Цитата:
|
Gaara_sand1,
было [1, 2, 3] извлекли 1 "умножили" на все комбинации [2, 3] было [2, 3] извлекли 2 "умножили" на все комбинации [3] и т.д. function perms(xs){ var r=[]; for (var i=0;i<xs.length;i++){//[1, 2, 3] var xs_ = xs.slice(),//[2, 3] x = xs_.splice(i, 1),//1 ps = xs_.length ? perms(xs_) : [[]];//все комбинации r.push(...ps.map(p=>x.concat(p)));// "умножили" } return r; } как то так... |
Часовой пояс GMT +3, время: 16:17. |