我的任务是编写一个以1个机器人开头的代码,我需要知道需要多少个月才能获得200个机器人。
条件:
从1个机器人开始,这个机器人收集材料2个月。使用这些材料,它可以构建3个机器人,每月1个机器人。所以一个机器人的周期是5个月。当然,新建的机器人也会收集材料2个月,然后每个都建立3个机器人,等等......
我唯一的提示是它应该使用3个变量来完成。每个收集月份为2个,每个建筑月份为3个。
这是用Java完成的。提前谢谢!
答案 0 :(得分: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
答案 1 :(得分:1)
暗示一种可能的方法:
由于此处的最小时间单位为1个月,因此我们有一个时间变量,每次增加1个月。
机器人将做什么取决于他目前在5个月周期的哪个月。 因此,我们会跟踪每个州的机器人数量,
当一个月过去了,不同州的机器人数量将如何变化?机器人将进入下一个州。可能(取决于他们的状态)他们也将生产一个新的机器人。这个机器人会处于哪种状态?
继续循环,直到你拥有所需数量的机器人。
答案 2 :(得分:0)
既然你根本没有任何线索,我会给你三个提示:
答案 3 :(得分: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);
}
}
}