【问题标题】:Queues and iteration issue [closed]队列和迭代问题[关闭]
【发布时间】:2013-04-06 14:59:54
【问题描述】:

谁能帮我解答这个问题?我不知道如何解决它,甚至不知道如何开始。

下面的代码段是一个从 1 到 5 的计数控制循环。在每次迭代中,循环计数器要么被打印,要么被放入队列中,具体取决于方法 random(假设 random 随机返回真假)。

在循环结束时,队列中的元素被删除并打印。由于队列的逻辑属性,此代码段无法打印循环计数器值的某些序列。给您一个输出,并要求您确定代码段是否可以生成输出。

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
    是真是假还是信息不足?

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

【问题讨论】:

  • 这是你今天发布的第二个作业问题,没有表现出任何努力。你认为答案是什么?你的理由是什么?
  • 什么时候要求理解错了?你只是选择按照你的意愿来判断它吗?检查我的问题,他们每个人都是在寻求理解而不是直接寻求答案。
  • 阅读当您的鼠标位于“否决”链接(向下箭头)上时出现的工具提示。它说“这个问题没有显示任何研究工作”。我认为你的问题与此相符。你没有表现出任何研究成果。

标签: java loops queue iteration


【解决方案1】:

我不知道如何解决它,甚至不知道如何开始。

以下是关于如何开始的建议:

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

【讨论】:

    【解决方案2】:

    a. 是的。这是random() 返回true 5 次的情况(这种情况发生的概率为 0.03125)

    b. 让我们假设它是 true

    可能的情况:

    i = 1 random() 返回 true 时,它会打印 1。

    然后,为了使 b 如我们假设的那样为真,在i = 2 中,random() 必须返回 false(否则程序将打印 1与我们的假设相矛盾)。

    所以,我们将进入 else 语句并入队 1。

    i = 3 也一样。

    现在我们要打印 4,假设 random() 返回 true

    所以,在队列中我们有:2 3 5

    ..继续这样想,你就会知道答案了。

    解决这个问题的关键是假设:

    您可以随时假设random() 是真/假。

    【讨论】:

    • Maroun,我从一开始就明白 a 的情况,随机都是真的,但是对于 b 和 c 我没有搞好,b 是真的吗?既然它打印 1,3,5 如果一切都是真的并且 4 2 dequed?还是我走错了路?
    • b 是真的。如果您 random() 是:true, false, true, false false,则会发生这种情况。
    • 栗色,不会也是真假真假真假吧?
    • 然后它会打印 1 3 5 4 2
    • 哦,好吧,所以对于 i=5,它可能是真或假 b。
    【解决方案3】:

    这令人困惑。查看控制台,如果 random() 为真,我将打印出计数。否则我会把它排入队列。然后我将在最后打印出队列,在不知道实际顺序的情况下打印出包含 1-5 在内的每个数字。让队列中的 println 看起来像这样会更有用: System.out.println("队列" + 编号);

    【讨论】:

    • 谢谢,我只是用纸和笔来解决所有可能的问题。
    【解决方案4】:

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

    因此存在三种明确的情况:

    1. 所有条目都已打印(没有排队)。您将获得 12345。
    2. 所有条目都已排队。您将再次获得 12345。
    3. 打印了一些条目 - 一些条目已排队。

    在第 3 种情况下,显然您会得到 两个递增序列,其中 第一个序列中缺失的数字出现在第二个序列中

    所以,现在您可以看到会发生什么,我建议您开始考虑如何识别这些。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-23
      • 2019-10-07
      • 1970-01-01
      • 2020-05-19
      • 1970-01-01
      • 1970-01-01
      • 2020-10-16
      • 1970-01-01
      相关资源
      最近更新 更多