2016-10-17 2 views
1

Привет и спасибо, что нашли время, чтобы посмотреть на это.Цикл в очереди с петлями и If/Else

Я пытаюсь достичь следующий вывод:

Итерация 0:
Queue 1 = 2345678910 | Очередь 2 =
Итерация 1:
Очередь 1 = 3579 | Очередь 2 = 2
Итерация 2:
Очередь 1 = 57 | Очередь 2 = 23
Итерация 3:
Очередь 1 = 7 | Очередь 2 = 235
Итерация 4:
Очередь 1 = | Очередь 2 = 2357

Это должно быть реализация «The Sieve of Eratosthenes»
Я не буду врать это, очевидно, школьная работа! (Хотя крайний срок прошел, и я не пытаюсь получить легкий класс. Я действительно хочу знать, почему я не мог заставить это работать)
Я интенсивно искал поиск, но все подобные вещи были реализованы с использованием массивов. (что профессор не позволяет)

here является скрипкой, которая показывает, где я нахожусь:

Это, кажется, моя проблема Это не будет удалить последний элемент.

if (this.first == this.last) { 
     this.first = null; 
     return this.first.content; 
     this.length--; 
    } 

Я завален его со всеми видами управляющих операторами, чтобы найти логическую проблему ...

, когда я начинал, я был уверен, что я могу сделать это, как следует:

Петли через очередь 1 и сохранить текущее значение (х) - Loop через очередь 1, переместить первый элемент в очередь 2 ---- если/другое элемент тока делится на й двигаться по другой повторной очереди

Я включил это до тех пор, пока петли, но она застревает с удалением последнего элемента

// find the primes function 
    function fp() { 

    fillQueue(); // call the fillQueue function below 

    document.getElementById("output").innerHTML += "Ctrl " + "|it. " + it + " |queue length " + q1.length + " |x " + x + " |current x" + cx + " |Q1: = " + q1.toString() + " | Q2: = " + q2.toString() + " | Q3: = " + q3.toString() + "<br />"; 

    while (q1.length >= 0) { 
    dq1(); 
    cx = x; 
    q3.enqueue(cx); 

    while (q1.length >= 0) { 
     dq1(); 
     eval(); 
     it++; 
    } 


    while (q2.length >= 0) { 
     dq2(); 
     d1.enqueue(x); 
    } 
    } 
+1

Помните: '=' это назначение, '' == (или лучше, '' ===) для сравнения. Эта строка вызовет у вас некоторые проблемы: 'it = n - 1'. Вероятно, это также должно быть '<' или '<=' вместо '='. –

+0

спасибо за ответ ... что исправил проблему итерации и приблизил меня ... все еще есть некоторые проблемы, которые нужно решить, поскольку вывод все еще не прав – Qriz75

ответ

1

Я предлагаю использовать другой подход и цикл в то время как первый элемент чисел меньше, чем число, пока проверка не должна иметь место. Выполните вывод протокола, нажмите первый элемент чисел на multiples, затем отфильтруйте numbers с проверкой на кратное число с нулевым индексом.

В конце выведите другой протокол.

function calculate() { 
 
    var number = document.getElementById('number').value, 
 
     numbers = Array.apply(null, { length: number - 1 }).map(function (_, i) { return i + 2; }), 
 
     multiples = []; 
 

 
    while (numbers[0] < number) { 
 
     document.getElementById('out').innerHTML += numbers.join(' ') + ' ||| ' + multiples.join(' ') + '\n'; 
 
     multiples.push(numbers[0]); \t \t \t \t 
 
     numbers = numbers.filter(function (a) { 
 
      return a % numbers[0]; 
 
     }); \t \t \t \t 
 
    } 
 
    document.getElementById('out').innerHTML += numbers.join(' ') + ' ||| ' + multiples.join(' ') + '\n'; 
 
}
<input id="number" /><button onclick="calculate()">calculate</button> 
 
<pre id="out"></pre>

+0

Большое вам спасибо ... Мне нравится ... профессор не позволяет использовать массивы. Я попытаюсь реализовать это с очередями. – Qriz75

+0

что-то не так с моим процессом де-очереди ...Он не удалит последний элемент ;-( – Qriz75

 Смежные вопросы

  • Нет связанных вопросов^_^