0

我有一个任务是编写一个以 1 个机器人开头的代码,我需要找出最多 200 个机器人需要几个月的时间。

条件:

从 1 个机器人开始,这个机器人收集材料 2 个月。有了这些材料,它可以制造3个机器人,每个月1个机器人。所以一个机器人的周期是5个月。当然,新造的机器人也收集材料2个月,然后每人造3个机器人,以此类推……

我唯一的提示是应该使用 3 个变量来完成。每个收集月 2 个,每个建筑月 3 个。

这是在 Java 中完成的。提前致谢!

4

4 回答 4

1

我会以面向对象的方式解决这个问题。

我将创建一个带有公共方法 workForAMonth() 的 Robot 类,它可能会返回一个新的机器人或 null。

主循环看起来像这样(伪代码):

 create an empty List of robots
 add one robot to it
 while the list of robots has less than 200 entries
     create a new list of the newly build robots
     iterate the list of existing robots. for each robot:
          call the workForAMonth method. When it returns a robot, append it to the list of newly build robots
     append the newly build robots to the main list
     add 1 to month
 output month

workForAMonth 方法如下所示:

 increment the private month counter of this robot by 1
 whe the counter is 5, set it back to 0
 when the counter is 2 or larger, return a new Robot, else return null
于 2012-09-11T08:05:21.080 回答
1

提示一种可能的方法:

因为这里的最小时间单位是 1 个月,所以让我们有一个时间变量,每次增加 1 个月。

机器人会做什么取决于他目前处于 5 个月周期中的哪个月。所以,我们跟踪每个状态有多少机器人,

  • 第一个聚会周有多少机器人?
  • 第二个聚会周有多少机器人?
  • 第一个建造周有多少机器人?
  • 第二个建造周有多少机器人?
  • 第三个建造周有多少机器人?

一个月过去了,不同状态的机器人数量会发生怎样的变化?机器人将进入下一个状态。可能(取决于他们的状态)他们也会生产一个新的机器人。这个机器人将处于哪个状态?

继续循环,直到您拥有所需数量的机器人。

于 2012-09-11T09:26:20.510 回答
0

既然你一点头绪都没有,我给你三个提示:

  • 忘掉机器人、物体和编程的东西(至少,一开始是这样),试着想想随着时间的推移机器人数量的函数
  • 阅读递归
  • 阅读与您的问题密切相关的斐波那契数列。
于 2012-09-11T08:11:01.553 回答
0

嗯......解决方案原来很简单,这里是:

class Robot{
public static void main(String[] args){
    int g1 = 1, g2 = 0, b1 = 0, b2 = 0, b3 = 0, month = 0, tot = 0, left, built;
    while(tot<200){
        month++;
        tot = g1 + g2 + b1 + b2 + b3;
        System.out.println("Month " + month + " materials for " + (g1 + g2) + " robots were gathered and " + (b1 + b2 + b3) + " were built \n");
        System.out.println(" Totally there's " + tot + " Robots on the moon \n \n");
        built = b1 + b2;
        left = b3;
        b3 = b2;
        b2 = b1;
        b1 = g2;
        g2 = g1;
        g1 = (left + built);
    }
}
}
于 2012-09-11T16:00:54.320 回答