2013-05-06 6 views
2
Algorithm 1. QUEUESTUFF(n) 
Input: Integer n 
1) Let Q = an empty Queue 
2) For i = 1 to n 
3) Q.Enqueue(i) 
4) End For 
5) For i = 1 to n-1 
6) Let X = Q.Dequeue() 
7) End For 
8) Let X = Q.Dequeue() 
Output: The contents of X 

Q.Enqueue(X) add item X to the queue 
X = Q.Dequeue() extracts an item from the queue and assigns it to X. 
If the queue is empty then -999 is returned. 

Если п> 0 Я понимаю, что этот алгоритм будет выводить п-1, например, при п = 6, X будет выводиться, которая будет равна 5.Анализ псевдокод

Однако, что если п < 0? Может ли циклы перейти от 1 к отрицательным? Если нет ... Я считаю, что ни одна из циклов For не запустилась, давая нам выход из -999 (поскольку очередь пуста).

Если петли могут пойти в минусы, то, скажем, n = -2. Очередь будет {1, 0, -1, -2}. Затем мы должны были удалить один-три раза ... Создание X (последний элемент, на который был применен dequeue) -2. Итак, что теперь возвращает этот алгоритм? Довольно много n = X правильно?

+0

Петли могут входить в отрицательные стороны, и вы правы. – isaach1000

+0

Это очень неправильно, если мы предположим, что для (int i = 1; true; i--) ваша очередь имеет 4 числа и не может удалить из нее 5 номеров, поэтому x = -999 –

+0

, и в вашем вопросе вы сказали, что если n> 0, я понимаю, что этот алгоритм выведет n-1, вы уверены, что хотите запустить 8-ю строку? –

ответ

0

Для п> 0 очередь будет заполнена в следующем порядке (линии от 1 до 4):

1, 2, 3, ..., n 

в строках 5 до 7 вы добывающие один за другим (FIFO: первый в первого выход):

1, 2, 3, ..., n-1 

и, наконец, в строке 8 вы извлечь последний элемент:

X = n 

как алгоритм заявил, я уверен, что оператор For выполнен только для n >= 1, но для случая n < 1 (и оператора For от 1, 0, -1,..., n) очередь заполняется значениями 1-n+1 = 2+abs(n), а значения 1-(n-1)+1 = 3+abs(n) извлекаются в строках с 5 по 7, поэтому очередь здесь уже пуста. В строке 8 чтения с теперь пустой очереди будет возвращать

X = -999 

Но, как я сказал, я предполагаю, что For i = 1 to n не выполняется вообще для n<1, поэтому снова линия 8 даст (из пустой очереди):

X = -999 
Смежные вопросы