Вывести список чисел, состоящих из 4 цифр, без повторений

Рейтинг: 0Ответов: 1Опубликовано: 21.02.2015

Идея заключается в том, что есть четыре переменные, первоначально равные нулям, я сравниваю переменные друг с другом, и если совпадений не найдено - печатаю в поле четыре цифры, которое составляют число без повторений", и делаю так до тех пор, пока каждая переменная не равна "9". На паскале реализуется, а на JavaScript нет - никаких сообщений об ошибке, да и синтаксис отличается. Помогите, кто знает, как можно реализовать программу на JavaScript.

Вот мои наработки:

<html>
<head>
    <title>один_точка_тридцать </title>
    <style type="text/css"></style>
</head>
<body>
    <form name="frm1" align="center">
        <b>Числа из четырех цифр без повторений.</b><br>
        Введите числа:<br>
        <input type="text" name="ch1" value=""><br>
        <input type="button" value=вывести" /><br>
        <textarea name="text"></textarea>
    </form>

    <script>

        function vivod(v)
        {
            document.frm1.ch1.value += v + ' ';
            var p = 0;
            for (i = 0, j = 0, k = 0, l = 0;
                 i <= 9, j <= 9, k <= 9, l <= 9; i++, j++,
                    k++, l++) {
                if ((i != j) && (i != k) && (j != k) && (l != i) && (l != j) && (l != k)) {
                    //document.frm1.ch1.value=i+j+k+l+'
                    //v=i+j+k+l+'
                    p++;   
                } 
            } 
        }
    </script>
</body>
</html>

Ответы

▲ 2

Скорее всего это уже не актуально, но я все же отпишу. Код не работает по следующим причинам.

  1. В событие onclick не передаются аргументы, в то время как функция ожидает их получить. Поэтому она будет заносить значение undefined в переменную v, которая при преобразовании в строку становится "undefined"

  2. Цикл не имеет смысла, так как условие внутри него никогда не выполнится. В конструкции for инкрементируются ВСЕ 4 переменные одновременно. Если хочешь делать это поочередно - делай вложенные циклы (bad advise, but...).

  3. Внутри for переменные тоже нужно объявлять

    for (var i = 0, j = 0, k = 0, l = 0; i <= 9, j <= 9, k <= 9, l <= 9; i++, j++, k++, l++) {..}

  4. Проверку повторений в строке можно проверить так

    "3453".split("3").length > 2

    , где "3453" строка для проверки. Конструкция вернет true если повторения есть.

  5. Проще будет перебрать значения от 1 до 9999 в рамках такой задачи используя один цикл и одну переменную. Если по производительности не устраивает можно рассмотреть другие варианты.