我有一个任务是编写一个以 1 个机器人开头的代码,我需要找出最多 200 个机器人需要几个月的时间。
条件:
从 1 个机器人开始,这个机器人收集材料 2 个月。有了这些材料,它可以制造3个机器人,每个月1个机器人。所以一个机器人的周期是5个月。当然,新造的机器人也收集材料2个月,然后每人造3个机器人,以此类推……
我唯一的提示是应该使用 3 个变量来完成。每个收集月 2 个,每个建筑月 3 个。
这是在 Java 中完成的。提前致谢!
我有一个任务是编写一个以 1 个机器人开头的代码,我需要找出最多 200 个机器人需要几个月的时间。
条件:
从 1 个机器人开始,这个机器人收集材料 2 个月。有了这些材料,它可以制造3个机器人,每个月1个机器人。所以一个机器人的周期是5个月。当然,新造的机器人也收集材料2个月,然后每人造3个机器人,以此类推……
我唯一的提示是应该使用 3 个变量来完成。每个收集月 2 个,每个建筑月 3 个。
这是在 Java 中完成的。提前致谢!
我会以面向对象的方式解决这个问题。
我将创建一个带有公共方法 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
提示一种可能的方法:
因为这里的最小时间单位是 1 个月,所以让我们有一个时间变量,每次增加 1 个月。
机器人会做什么取决于他目前处于 5 个月周期中的哪个月。所以,我们跟踪每个状态有多少机器人,
一个月过去了,不同状态的机器人数量会发生怎样的变化?机器人将进入下一个状态。可能(取决于他们的状态)他们也会生产一个新的机器人。这个机器人将处于哪个状态?
继续循环,直到您拥有所需数量的机器人。
既然你一点头绪都没有,我给你三个提示:
嗯......解决方案原来很简单,这里是:
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);
}
}
}