Имеется четыре острова: А, B, C, D. На трех островах (A, B, C) по 2000 жителей, а на D - 2015. Можно ли через какое-то количество дней сделать, чтобы на островах B, C, D было 2000 жителей, а на А - 2015, если каждый день с одного из островов на все остальные переселяется по одному человеку.
Можно ли решить это задание? Буду благодарен за любую помощь.
Можно ли решить это задание? Буду благодарен за любую помощь.
должно было быть так:
то на следующий день 3 человека переселится с другого острова но не острова A. Каждый день может быть один и тот же остров, к примеру каждый день будет переселение с острова A — то через 10 дней получиться
A = 1985 B = 2005 C = 2005 D = 2020. А в вашем коде каждый день идет переселение с острова на острова последовательно. Вы не правильно поняли условие задания. Проделать 4 последовательных кода можно и на листочку.
получиться вот так:
иначе точно никогда не произойдет)
А вот использование рендома в строке int e = (int) (Math.random() * 4 + 1), не даёт права говорить о закономерности какого-либо решения.
public class TestIsland {
public static void main(String[] args) {
int checkNumber = 2015;
String checkName = «A»;
ArrayListislands = new ArrayList<>();
for (int i = 0; i < 4; i++) {
islands.add(new Island());
}
islandsInitializer(islands, 0, checkName, 2000);
islandsInitializer(islands, 1, «B», 2000);
islandsInitializer(islands, 2, «C», 2000);
islandsInitializer(islands, 3, «D», checkNumber);
System.out.println("***** Until the resettlement ******");
printPeopleOnIsland(islands);
System.out.println("***** resettlement ******");
for (int i = 0; i < 3000; i++) {
relocation(islands);
rotateIslands(islands);
System.out.println(«Passed the day: » + i);
if (checkIsland(islands, checkName, checkNumber)) {
System.out.println(«Islands » + checkName + «population is» + checkNumber);
break;
}
printPeopleOnIsland(islands);
}
printPeopleOnIsland(islands);
}
public static void rotateIslands(ArrayListlist) {
list.add(0, list.get(list.size() — 1));
list.remove(list.size()-1);
}
public static boolean checkIsland(ArrayListlist, String checkName, int number) {
boolean flag = false;
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getName().equals(checkName) && list.get(i).getPeopleCount() == number) {
flag = true;
}
}
return flag;
}
public static void islandsInitializer(ArrayListlist, int number, String name, int peopleCount) {
list.get(number).setName(name);
list.get(numbe
Если, конечно, я правильно понял — алгоритм такой
1 день — с А на В, с В на С, с С на А, с D на А
2 день — с А на В, с В на С, с С на А, с D на А
…
если отбросить мишуру, у нас остается только
B=0, C=0 и D=15.
а так же возможные действия:
1. инкремент/декремент всех чисел разом
2. вычесть из одного из чисел 3, и добавить к двум оставшимся по 1
0 0 15
или
n n n+15
рассмотрим операции которыми мы можем воспользоваться.
+1 +1 -3, воспользуемся инкрементом и приведем, +4 +4 0 или 0 0 -4 (кому как нравится)
таким образом, чтобы скомпенсировать итерации и сделать сделать все три числа равными, ряд должен принять форму
n n n+k,
где k — число делящееся на 4 без остатка.
15 не делится — следовательно, задача не может быть решена