【发布时间】:2016-11-22 16:14:20
【问题描述】:
我在一家 IT 公司的编程测试中被问到这个问题。 我会尽力解释的。
问题如下:
给定一个在原点 (0,0) 的 Ant,它只在给定的路径数组上顺时针方向移动(只需要右转)。例如,如果路径数组是 {2,3,4,5,7},蚂蚁向左移动 2 个单位,然后向下移动 3 个单位,然后向右移动 4 个单位,然后向上移动 5 个单位,然后向左移动 7 个单位,依此类推等等。
所以编写一个代码来显示蚂蚁的最终位置(坐标)并说明蚂蚁是否与它的路径相交,格式如下:
蚂蚁:(x1,y1) :(是/否)
例如: (1) 数组={1,6,3,5,4} 输出:蚂蚁:(2,-1):是的
以图形方式显示
(0, 0)__(1,0)
|
(-2,-1) __ __ __ __(2,-1)
| |
| |
| |
| |
| |
(-2,-6) __ __ __ (1,-6)
这里蚂蚁在 (1,-1) 处与它的路径相交
(2) 数组={2,2,2,1} 输出:蚂蚁:(0,-1):否
以图形方式显示
(0, 0)__ __(2,0)
.(0,-1) |
| |
(0,-2)__ __(2,-2)
这里蚂蚁没有与它的路径相交。
我写了一个代码来找到最终位置:
public class Ant {
static void findAnt(int arr[])
{
int count = 0;
int x=0,y=0;
for(int element: arr){
if(count>3)
count = 0;
switch(count++){
case 0: x=x+element;
break;
case 1: y=y-element;
break;
case 2: x=x-element;
break;
case 3: y=y+element;
break;
}
}
System.out.println("Ant: "+x+" "+y);
}
public static void main(String[] args)
{
int arr[] = new int[]{2,2,2,1};
findAnt(arr);
}
}
但是我无法设计一种算法来显示蚂蚁是否相交。 请指教。
【问题讨论】:
-
创建一个布尔数组,将其全部填充为 false,然后当蚂蚁在该图块上“行走”时,将其翻转为 true。然后当你有蚂蚁的最终位置时,检查那个图块是否已经是真的,如果是,那么它之前就已经存在了。
-
谢谢@user123,如果你能详细说明你的解决方案,那会很有帮助吗?
-
创建一个
boolean[][] gameBoard,大小可以设为n * n,初始化为false。然后开始循环遍历你的动作数组,当蚂蚁沿着每个索引行走时,将值翻转为true(它一直在那里)。然后,当您到达移动数组中的最后一个索引时,您检查该图块是否已经是true,如果是,那么您已经在那里了。 -
@user123: 如果蚂蚁的路径与它自己在一个不是蚂蚁最后访问的瓦片上相交怎么办? :)
-
另一种方法是创建一大堆线(蚂蚁起点到终点),然后进行点线测试,其中点是蚂蚁对所有线的结束位置行。
标签: java algorithm array-algorithms