队列和迭代问题
任何人都可以帮助我解决这个问题吗?我不知道如何解决它,甚至不知道如何开始。队列和迭代问题
以下代码段是从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 2 3 4 5
真,假或者没有足够的信息?以下是可能的:1 3 5 4 2
true,false或not enough information?以下是可能的:1 3 5 2 4
真,假或不足的信息?
a。true。这是random()
返回真正 5倍的情况下(这将在0.03125的概率发生)
湾让我们假设这是真的:
一个可能的场景:
当i = 1
random()
返回真正所以它打印1。
然后,为了b为我们假设是正确的,在i = 2
它必须是random()
返回假(否则程序将在我们的假设的矛盾打印1)。
所以,我们要else语句和排队1
同为i = 3
。
现在我们要4打印,让我们假设random()
返回true。
因此,在队列中,我们有:2 3 5
。继续思考这种方式,你就会知道答案。
解决这一点,关键是假设:
每当你想,你可以假设random()
是真/假。
Maroun,我从一开始就明白了,随机都是真的,但是对于b和c我没有好转,b是真的吗?既然它打印1,3,5,如果所有的都是真的,并且4 2需要打印?或者我在错误的轨道上? – 2013-04-06 15:16:26
b是真实的。如果你的'random()'是:** true,false,true,false false **,就会发生这种情况。 – Maroun 2013-04-06 15:20:36
栗色,这不会也是真的,假的,真的,假的,真的吗? – 2013-04-06 15:25:11
我不明白怎么解决它,甚至如何下手。
这里是如何开始的建议:
使用笔和纸,模拟程序(随机选择的两个分支,而不是每个random()
调用之一)的多次运行,看看你是否发现任何规律。即使你不这样做,代码中只有32种不同的路径。
这很混乱。看着控制台,如果random()是真的,我会打印出数量。否则我会排队。然后,我打算在最后打印出队列,在不知道实际顺序的情况下打印出每个1-5号打印输出。如果队列中的println如下所示会更有用: System.out.println(“Queue”+ number);
谢谢,生病只是使用纸和笔为所有可能的解决方案。 – 2013-04-06 15:25:52
您的循环从1到5。但是,其中任何数量都可以放入队列并在最后打印。
因此有三种明确情形:印
- 的所有条目(均未排队)。您将获得12345.
- 所有条目都排队。再次,你将得到12345.
- 一些条目被打印 - 一些条目已排队。
万一3,显然你会得到2,其中数从第一序列缺失出现在第二序列增加序列。
所以,现在你可以看到预期的结果,我建议你开始考虑如何识别这些。
这是你今天发布的第二个家庭作业问题,没有显示任何努力。你认为答案是什么?你有什么推理? – 2013-04-06 15:03:07
何时错误地要求理解?你只是选择按照你的意愿来判断它?检查我的问题,他们每个人都直接要求不理解答案。 – 2013-04-06 15:19:11
阅读鼠标位于“Downvote”链接(向下箭头)时出现的工具提示。它说“这个问题没有显示任何研究工作”。我认为你的问题与此相符。你没有显示任何研究工作。 – 2013-04-06 15:34:01