2013-04-06 110 views
-4

任何人都可以幫助我解決這個問題嗎?我不知道如何解決它,甚至不知道如何開始。隊列和迭代問題

以下代碼段是從1到5進行計數控制的循環。在每次迭代時,根據隨機方法返回的布爾結果,循環計數器被打印或放入隊列中(假定隨機隨機返回無論是真或假)。

在循環結束時,隊列中的元素被刪除並打印。由於隊列的邏輯屬性,此代碼段無法打印循環計數器值的某些序列。給你一個輸出並要求確定代碼段是否可以生成輸出。

for(count = 1; count <= 5; count++) { 
    if(random()) 
     system.out.println(count); 
    else 
     queue.enqueue(count); 
} 
while (!queue.isEmpty()) 
{ 
    number = queue.dequeue(); 
    system.out.println(number); 
} 
  1. 下面出來是可能的:1 2 3 4 5
    真,假或者沒有足夠的信息?

  2. 以下是可能的:1 3 5 4 2
    true,false或not enough information?

  3. 以下是可能的:1 3 5 2 4
    真,假或不足的信息?

+1

這是你今天發佈的第二個家庭作業問題,沒有顯示任何努力。你認爲答案是什麼?你有什麼推理? – 2013-04-06 15:03:07

+0

何時錯誤地要求理解?你只是選擇按照你的意願來判斷它?檢查我的問題,他們每個人都直接要求不理解答案。 – 2013-04-06 15:19:11

+0

閱讀鼠標位於「Downvote」鏈接(向下箭頭)時出現的工具提示。它說「這個問題沒有顯示任何研究工作」。我認爲你的問題與此相符。你沒有顯示任何研究工作。 – 2013-04-06 15:34:01

回答

0

a。true。這是random()返回真正 5倍的情況下(這將在0.03125的概率發生)

讓我們假設這是真的

一個可能的場景:

i = 1random()返回真正所以它打印1。

然後,爲了b爲我們假設是正確的,在i = 2它必須是random()返回(否則程序將在我們的假設的矛盾打印1)。

所以,我們要else語句和排隊1

同爲i = 3

現在我們要4打印,讓我們假設random()返回true

因此,在隊列中,我們有:2 3 5

。繼續思考這種方式,你就會知道答案。

解決這一點,關鍵是假設:

每當你想,你可以假設random()是真/假。

+0

Maroun,我從一開始就明白了,隨機都是真的,但是對於b和c我沒有好轉,b是真的嗎?既然它打印1,3,5,如果所有的都是真的,並且4 2需要打印?或者我在錯誤的軌道上? – 2013-04-06 15:16:26

+0

b是真實的。如果你的'random()'是:** true,false,true,false false **,就會發生這種情況。 – Maroun 2013-04-06 15:20:36

+0

栗色,這不會也是真的,假的,真的,假的,真的嗎? – 2013-04-06 15:25:11

3

我不明白怎麼解決它,甚至如何下手。

這裏是如何開始的建議:

使用筆和紙,模擬程序(隨機選擇的兩個分支,而不是每個random()調用之一)的多次運行,看看你是否發現任何規律。即使你不這樣做,代碼中只有32種不同的路徑。

0

這很混亂。看着控制檯,如果random()是真的,我會打印出數量。否則我會排隊。然後,我打算在最後打印出隊列,在不知道實際順序的情況下打印出每個1-5號打印輸出。如果隊列中的println如下所示會更有用: System.out.println(「Queue」+ number);

+0

謝謝,生病只是使用紙和筆爲所有可能的解決方案。 – 2013-04-06 15:25:52

0

您的循環從1到5。但是,其中任何數量都可以放入隊列並在最後打印。

因此有三種明確情形:印

  1. 的所有條目(均未排隊)。您將獲得12345.
  2. 所有條目都排隊。再次,你將得到12345.
  3. 一些條目被打印 - 一些條目已排隊。

萬一3,顯然你會得到2,其中數從第一序列缺失出現在第二序列增加序列

所以,現在你可以看到預期的結果,我建議你開始考慮如何識別這些。