Можете ли да ми кажете, моля!
При кой вход се чупи тази JAVA програма:
https://judge.softuni.bg/Contests/Practice/Index/1247#9
Програмата работи със всички входове които се сетих да нашиша. Ще съм ви благодарен ако ми покаете входа/ входовете при които логиката ми се чупи.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; public class LadyBug { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); int fieldSize = Integer.parseInt(reader.readLine()); // чете ред от конзолата и го преобразува в масив от цели числа int[] bugLine = Arrays.stream(reader.readLine().split(" ")) .mapToInt(Integer::parseInt).toArray(); // въвежда нов масив с размера на полето int[] fieldArray = new int[fieldSize]; // поставя калинките на посочените от входа места върху полето for (int i = 0; i < fieldArray.length; i++) { for (int j = 0; j < bugLine.length; j++) { if (i == bugLine[j]) { fieldArray[i] = 1; } } } // чете команда от конзолата String line = reader.readLine(); int index = 0; int moves = 0; String command = ""; // докато командиата не е Край, програмата работи while (!line.equals("end")) { // разделя въведената команда от потребителя и елементите поставя в масив String[] directionArray = line.split("\\s+"); // разделя масива полувен от командата на оперативните части на програмата index = Integer.parseInt(directionArray[0]); command = directionArray[1]; moves = Integer.parseInt(directionArray[2]); // проверява от какъв тип е командата switch (command) { // при команда дясно изпълнява кода по-долу case "right": if(index > fieldArray.length - 1 || index < 0){ break; } if (fieldArray[index] == 0) { break; } if ((index + moves) > fieldArray.length - 1 || (index + moves) < 0) { fieldArray[index] = 0; break; } else { for (int i = index; i < fieldArray.length; i++) { if (i + moves > fieldArray.length - 1 || i + moves < 0) { fieldArray[index] = 0; break; } else { if (fieldArray[i + moves] == 0) { fieldArray[i + moves] = 1; fieldArray[index] = 0; break; } } } } break; // при команда ляво изпълнява кода по-долу case "left": if(index > fieldArray.length - 1 || index < 0){ break; } if (fieldArray[index] == 0) { break; } if ((index - moves) < 0 || (index - moves) > fieldArray.length - 1) { fieldArray[index] = 0; break; } else { for (int i = index; i < fieldArray.length; i++) { if (i - moves > fieldArray.length - 1 || i - moves < 0) { fieldArray[index] = 0; break; } else { if (fieldArray[i - moves] == 0) { fieldArray[i - moves] = 1; fieldArray[index] = 0; break; } } } } break; } // след като изълни командата, чете нова команда подадена от потребителя line = reader.readLine(); } // след команда Край, печата на конзолата резултат for (int bug : fieldArray) { System.out.print(bug + " "); } } }
Не успях да разбера, Явно тук е проблема :))
Така. При вход 4 за брий полета имаме 4 полета - нали? Това разбирам. Тук ли бъркам?
Ако имам 4 полета и на поле с номер ( разбираме индекс ) 0 и 2 т.е. на 1-во и 3-то имаме калинки, защо калнката от 0 при движение с 2 и след това при движение с 1 излиза от масива. Ще излезе от масива ако се движи с 2 и след като засече друга калинка. Това ли егрешката? При засичане с друга калинка не трябва да търся следващата вободна позиция а да запратя калинката отново с първоначалната скорост още напред. Така би излязла от масива.
Ако намери заета позиция продължава да си прескача със същата номерация.
7
0 3 6 са заети
right 3
от 0 проверява 3 е заета скача на 6 и там заета отива 9 извън масива и остава 3 и 6 заети.
Благодаря за тестовете. В ляво цялата задача е грешна.
Ще си налягам парцалите и ще видя къде бъркам.