Мне задали этот вопрос в тесте на программирование для ИТ-компании. Я постараюсь изо всех сил объяснить это.Программирование теста по алгоритмам?
Проблема заключается в следующем:
Дано Ant при возникновении (0,0), которая движется только в направлении по часовой стрелке (принимает только вправо поворачивается) на заданном массиве пути. так, например, если массив путей равен {2,3,4,5,7}, муравьи перемещают 2 единицы влево, затем перемещает 3 единицы вниз, затем двигает 4 единицы вправо, затем перемещает 5 единиц вверх, а затем 7 единиц, оставшихся так далее и так далее.
Так написать код, который отображает окончательную позицию муравья (координаты) и состояние, если муравей пересекает это путь в формате:
Ant: (x1, y1): (да/нет)
например: (1) массив = {1,6,3,5,4} выход: Ant: (2, -1): да
показывая его графически
(0, 0)__(1,0)
|
(-2,-1) __ __ __ __(2,-1)
| |
| |
| |
| |
| |
(-2,-6) __ __ __ (1,-6)
ее е муравей пересекающиеся свой путь в точке (1, -1)
(2) массив = {2,2,2,1} выход: Ant: (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);
}
}
Однако я не могу изобрести алгоритм, который показывает, если муравей пересекает или нет. Просьба сообщить.
Создать булев массив, заполнить все эту ложь, а затем, когда муравей будет «ходить» на этой плитке, переверни его к истине. Затем, когда у вас есть конечная позиция муравьев, проверьте, действительно ли эта плитка истинна, если да, то она была там раньше. – user123
Спасибо @ user123, Если бы вы могли разработать свое решение, это было бы очень полезно? –
Создайте 'boolean [] [] gameBoard', вы можете сделать его' n * n' в размере, инициализируя его значением false. Затем начинайте цикл через ваш массив движений, так как муравей идет по каждому индексу, переворачивая значение в значение 'true' (он был там). Затем, когда вы переходите к последнему индексу в массиве движений, вы проверяете, является ли плитка уже «истиной», если она есть, то вы уже были там. – user123