当前位置: 首页 > 知识库问答 >
问题:

找到适当和正确目的地的算法

公西季
2023-03-14

一个机器人降落在火星上,这恰好是一个笛卡尔网格;假设我们将这些指令交给机器人,例如LFFFRFFFRRFFF,其中“L”是“向左转90度”,“R”是“向右转90度”,而“F”是“前进一个空间”,请为机器人编写控制代码,使其最终到达适当和正确的目的地,并包括单元测试。

下面是命令“FF”的输出示例:

[0, 2]

我可以在谷歌上找到这个问题的解决方案,但我不太清楚解释。我正在努力清楚地理解如何解决这个问题并在Java中实施的逻辑。感谢任何帮助。

更新:这是一个面试问题。目前,我正在努力提高我的知识。这对我来说是一个有趣的问题。如果我打破了任何叠加规则,我可以删除它。

这是我做的研究:Java 8中有Scala的对等物吗?

用于查找 NxN 网格中所有路径的算法

http://www . geeks forgeeks . org/check-if-a-given-sequence-of-moves-for-a-robot-is-circular-or-not/

共有3个答案

裴彦
2023-03-14

超级酷帅,你的逻辑是正确的基于我的观点,我测试了你的代码,发现了一些错误,你的字符串d需要在for循环之前转换数组*

in.nextLine().toCharArray()

*;和字符串 d 将是 char[]d 。此外,您的打印输出已更改

("["协弦[0]","协弦[1]"]")

。这是我做的全部代码。从那以后,它开始工作了

邵兴庆
2023-03-14
import java.util.Scanner;

public class Run{
    public static void main(String []args){
        int angle = 0, c = 0;
        int[] coords = {0,0};
        String d;
        Scanner in = new Scanner(System.in);
        System.out.println("Input your command");
        d = in.nextLine();
        for (c = 0; c < d.length; c++){
            if (d[c] == 'R'){
                 angle = (angle + 90)%360;
            }else if (d[c] == 'L'){
                 angle = (angle + 270)%360;
            }else if (d[c] == 'F'){
                 switch(angle){
                      case 0: coords[1]++;break;
                      case 90: coords[0]++;break;
                      case 180: coords[1]--;break;
                      case 270: coords[0]--;
                }
            }
         }
         System.out.println('['+coords[0]+','+coords[1]+']');
    }
}

我认为这段代码很简单。目前我没有Java环境,所以我无法测试它。如果我错了,请纠正我

陆建木
2023-03-14

我为您准备了以下代码:

public static String calculate(String str) {
    int x = 0;
    int y = 0;
    int[][] move = {{0,1}, {1,0}, {-1,0}, {0,-1}};
    int dir = 0;

    for (char ch: str.toCharArray()) {
        if (ch == 'F') { 
            x += move[dir][0]; 
            y += move[dir][1]; 
        } else if (ch == 'L') {
            dir++;
        } else if (ch == 'R') {
            dir--;
        }
        dir = (dir + 4) % 4;
    }
 return "[" + x + ", " + y + "]";
 }

让我们来分析一下我幼稚的解决方案

    < li> int[][] move = {{0,1},{1,0},{-1,0},{0,-1 } };是指当您使用变量< code>dir向左旋转led时的所有运动组合。 < li >循环< code>String str以获取each命令 < li >阅读命令,如果是< code>F,则向< code>dir方向移动。子阵列代表轴。 < li >如果旋转,增加或减少< code>dir以获得正确的结果。 < li >最后使< code>dir不溢出< code > dir =(dir 4)% 4;。这意味着当我向下移动< code>dir = 0并向左移动(< code>dir - )时,它将导致< code>dir=-1,这是非法的。因此< code>dir 4 = 3和< code>3 % 4 = 3,它给出了最后一组方向。

希望它有帮助,你现在明白了逻辑。

 类似资料:
  • 请,任何人都可以帮助我找到正确的XPath来检索日期值“07/05/2018 04:45” 我试过但没有成功: /输入[@type=“text”]@值 //*[@id="start Date"]

  • 问题内容: 我正在使用Maven开发Swing独立应用程序。我尝试遵循MVC模式。我对我的项目结构感到困惑。我有这样的事情: 现在,我想合并Spring框架,这使我可以放置DAO和BO接口和实现。我已阅读本文链接,建议的项目结构不适合我的项目。我想到的是添加以下内容: dao目录的内容如下所示(在模型目录中包含Client和Customer类): 这不好吗?我想学习好的做法。 问题答案: 您可以遵

  • 前几天,我开始注意到我的应用程序中有一些东西,它非常不一致。有时会发生,有时不会。 我正在使用导航组件来处理应用程序中的导航,我开始注意到,有时,当通过操作栏后退按钮或设备后退按钮弹出后退时,它返回到一个不再是起始目的地(或至少不应该是)的片段。 在我的例子中,应用程序在MainFragment中启动,经过身份验证后移动到DashboardFragment。这是一种非常常见的情况。 应用程序中的导

  • 当我尝试只使用Id作为值并删除列表时,它工作了。

  • null 我相信这个答案是正确的,但我无法证明。有人能证明它为什么起作用或提供一个反例吗?