Loading...
sasobig12 avatar sasobig12 -4 Точки

Можете ли да ми кажете, моля!

При кой вход се чупи тази 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 + " ");
        }

    }
}
Тагове:
-1
Fundamentals Module
Hristo13 avatar Hristo13 227 Точки

При вход

4

0 2

0 right 2

очаква се изход 0 0 1 0  защото втора позиция е заета след това търси ново място на 4та позиция но тя е извън масива и излита. Когато мястото е заето търси нова позиция със същата дължина на полет.

При теб изхода е 0 0 1 1.

 

 

Сходен приблем при вход наляво.

4
0 1
1 left 1
end

даваш изход  1 0 1 0

0
20/02/2019 17:53:04
sasobig12 avatar sasobig12 -4 Точки

Не успях да разбера, Явно тук е проблема :))

Така. При вход 4 за брий полета имаме 4 полета - нали? Това разбирам. Тук ли бъркам?

 

Ако имам 4 полета и на поле с номер ( разбираме индекс ) 0 и 2 т.е. на 1-во и 3-то имаме калинки, защо калнката от 0 при движение с 2 и след това при движение с 1 излиза от масива. Ще излезе от масива ако се движи с 2 и след като засече друга калинка. Това ли егрешката? При засичане с друга калинка не трябва да търся следващата вободна позиция а да запратя калинката отново с първоначалната скорост още напред. Така би излязла от масива.

0
Hristo13 avatar Hristo13 227 Точки

Ако намери заета позиция продължава да си прескача със същата номерация.

7
0 3 6 са заети

right 3
от 0 проверява 3 е заета скача на 6 и там заета отива 9 извън масива и остава 3 и 6 заети.

0
sasobig12 avatar sasobig12 -4 Точки

Благодаря за тестовете. В ляво цялата задача е грешна.

Ще си налягам парцалите и ще видя къде бъркам.

 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.