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.
如果n> 0我知道这个算法会输出n-1,例如,如果n = 6,X将输出,等于5。
然而,如果n< 0?循环可以从1到负数吗?如果不是......我相信For循环都不会运行,给我们输出-999(因为队列是空的)。
如果循环可以变成负数,那么让我们说n = -2。队列将是{1,0,-1,-2}。然后我们必须将1到3次出列...使X(应用出列的最终项目)-2。那么现在这个算法又回来了什么?几乎n = X正确吗?
答案 0 :(得分:0)
对于n> 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)
个值,并且在第5行到第7行中提取了1-(n-1)+1 = 3+abs(n)
个值,因此队列在这里已经为空。在第8行,从现在空队列中读取将返回
X = -999
但正如我所说,我认为For i = 1 to n
根本没有执行n<1
,所以第8行也会给出(因为空队列):
X = -999