Помогите перевести код с с++ на 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, время: 07:47. |