Показать сообщение отдельно
  #2 (permalink)  
Старый 22.05.2020, 16:36
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,730

Код - срань.

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

Результат смотрите в консоли.
Ответить с цитированием