队列和迭代问题

问题描述:

任何人都可以帮助我解决这个问题吗?我不知道如何解决它,甚至不知道如何开始。队列和迭代问题

以下代码段是从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

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

我不明白怎么解决它,甚至如何下手。

这里是如何开始的建议:

使用笔和纸,模拟程序(随机选择的两个分支,而不是每个random()调用之一)的多次运行,看看你是否发现任何规律。即使你不这样做,代码中只有32种不同的路径。

这很混乱。看着控制台,如果random()是真的,我会打印出数量。否则我会排队。然后,我打算在最后打印出队列,在不知道实际顺序的情况下打印出每个1-5号打印输出。如果队列中的println如下所示会更有用: System.out.println(“Queue”+ number);

+0

谢谢,生病只是使用纸和笔为所有可能的解决方案。 – 2013-04-06 15:25:52

您的循环从1到5。但是,其中任何数量都可以放入队列并在最后打印。

因此有三种明确情形:印

  1. 的所有条目(均未排队)。您将获得12345.
  2. 所有条目都排队。再次,你将得到12345.
  3. 一些条目被打印 - 一些条目已排队。

万一3,显然你会得到2,其中数从第一序列缺失出现在第二序列增加序列

所以,现在你可以看到预期的结果,我建议你开始考虑如何识别这些。