所以我目前的任务是创建一个算法,将第 1 行空间中的蜂鸣器堆向右移动。我想我有一个好的开始,我编写了代码来捡起一堆蜂鸣器,向右移动一个,然后放下那些蜂鸣器:
public static void shift(Athlete arg)
{
int count = 0;
while(!arg.nextToABeeper()) //the robot will move until it finds a beeper
{
arg.move();
}
while(arg.nextToABeeper()) //the robot will pick up the beepers in the pile, and keep a tab of them
{
arg.pickBeeper();
count++;
}
arg.move();
while(count > 0) //after moving 1 space to the right, it drops the beepers
{
arg.putBeeper();
count--;
}
shift(arg);
}
一排蜂鸣器有时在蜂鸣器之间有间隙,在这种情况下,此代码运行良好,但如果蜂鸣器堆相邻,机器人最终将第一堆倾倒到第二堆上,我不知道如何捡起第二堆蜂鸣器,因为现在第二堆蜂鸣器由第一堆蜂鸣器和第二堆蜂鸣器组成,我不知道如何只拾取第二堆蜂鸣器。
Rohit jain 给了我从行尾开始倒退的想法。尽管我认为这不是解决问题的方式,但它仍然是一个解决方案。因为蜂鸣器之间存在间隙,所以到达行尾实际上比人们想象的要困难得多。这就是我最终要做的。
public static void goToEnd(Athlete arg)
{
while(!arg.nextToABeeper())
{
arg.move();
}
while(arg.nextToABeeper())
{
arg.move();
}
if(!arg.nextToABeeper())
{
arg.move();
if(!arg.nextToABeeper())
{
arg.turnAround();
arg.move();
}
else
{
while(arg.nextToABeeper())
{
arg.move();
}
arg.turnAround();
}
}
}