Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.05.2020, 04:21
Новичок на форуме
Отправить личное сообщение для Gaara_sand1 Посмотреть профиль Найти все сообщения от Gaara_sand1
 
Регистрация: 20.05.2020
Сообщений: 6

Помогите перевести код с с++ на js
Здравствуйте есть код на c++ не знаю как перевести его в Javascript нужно чтобы N передавалось из html
Код:
#include <iostream>
using namespace std;
void swap(int *a, int i, int j)
{
  int s = a[i];
  a[i] = a[j];
  a[j] = s;
}
bool NextSet(int *a, int n)
{
  int j = n - 2;
  while (j != -1 && a[j] >= a[j + 1]) j--;
  if (j == -1)
    return false; // больше перестановок нет
  int k = n - 1;
  while (a[j] >= a[k]) k--;
  swap(a, j, k);
  int l = j + 1, r = n - 1; // сортируем оставшуюся часть последовательности
  while (l<r)
    swap(a, l++, r--);
  return true;
}
void Print(int *a, int n)  // вывод перестановки
{
  static int num = 1; // номер перестановки
  cout.width(3); // ширина поля вывода номера перестановки
  cout << num++ << ": ";
  for (int i = 0; i < n; i++)
    cout << a[i] << " ";
  cout << endl;
}
int main() 
{
  int n, *a;
  cout << "N = ";
  cin >> n;
  a = new int[n];
  for (int i = 0; i < n; i++)
    a[i] = i + 1;
  Print(a, n);
  while (NextSet(a, n))
    Print(a, n);
  cin.get(); cin.get();
  return 0;
}
функция взята отсюда https://prog-cpp.ru/permutation/
Ответить с цитированием
  #2 (permalink)  
Старый 22.05.2020, 16:36
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,707

Код - срань.

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);
}

Результат смотрите в консоли.
Ответить с цитированием
  #3 (permalink)  
Старый 22.05.2020, 18:40
Новичок на форуме
Отправить личное сообщение для Gaara_sand1 Посмотреть профиль Найти все сообщения от Gaara_sand1
 
Регистрация: 20.05.2020
Сообщений: 6

Можете пожалуйста привязать работу данного скрипта к этому 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>

Последний раз редактировалось Gaara_sand1, 22.05.2020 в 18:43.
Ответить с цитированием
  #4 (permalink)  
Старый 22.05.2020, 19:05
Новичок на форуме
Отправить личное сообщение для Gaara_sand1 Посмотреть профиль Найти все сообщения от Gaara_sand1
 
Регистрация: 20.05.2020
Сообщений: 6

можно узнать еще почему при вводе 0 начинается бесконечный цикл
Ответить с цитированием
  #5 (permalink)  
Старый 22.05.2020, 19:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

перестановка
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>

Последний раз редактировалось рони, 23.05.2020 в 08:38.
Ответить с цитированием
  #6 (permalink)  
Старый 23.05.2020, 05:17
Новичок на форуме
Отправить личное сообщение для Gaara_sand1 Посмотреть профиль Найти все сообщения от Gaara_sand1
 
Регистрация: 20.05.2020
Сообщений: 6

рони,
можете пожалуйста объяснить как работает данная функция и можно ли сделать чтобы при введении нуля выдавало просто "Всего:0"

Последний раз редактировалось Gaara_sand1, 23.05.2020 в 05:26.
Ответить с цитированием
  #7 (permalink)  
Старый 23.05.2020, 08:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от Gaara_sand1
можно ли сделать чтобы при введении нуля выдавало просто "Всего:0"
добавлено, смотрите код выше.
Сообщение от Gaara_sand1
можете пожалуйста объяснить как работает данная функция
мне сложно это сделать, возможно кто-то другой даст правильное обьяснение.
Ответить с цитированием
  #8 (permalink)  
Старый 24.05.2020, 11:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

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;
}


как то так...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите дописать код модального окна Sergeyaleksandrovich68 (X)HTML/CSS 1 04.08.2017 08:54
Помогите дописать код SkyRewir Общие вопросы Javascript 3 25.07.2017 10:27
После проверки js выполнить php код jess23 Общие вопросы Javascript 11 20.02.2017 18:13
Помогите вставить форму подписки в файле JS dexteron Общие вопросы Javascript 2 07.04.2012 23:47
Помогите доработать JS Dotoni (X)HTML/CSS 4 26.11.2009 20:59