Loading...
PetarIliev1 avatar PetarIliev1 73 Точки

*Lady Bugs

10. *LadyBugs - https://softuni.bg/trainings/resources/officedocument/37738/exercise-problem-descriptions-technology-fundamentals-with-java-january-2019/2239

Judge- https://judge.softuni.bg/Contests/Practice/Index/1247#9

 

40/100 Точки.  https://pastebin.com/892bhvvC

Тагове:
0
Module: Java Advanced 17/02/2019 16:32:40
SophYO avatar SophYO 74 Точки

Здрасти!

Адски заплетено и объркващо решение си захванал. Понеже ми е много трудно да вникна какво се опитваш да направиш и какво си мислиш, че правиш, а виждам, че и другите се разколебават да го разгадаят, ти пращам едно примерно по- кратко решение.

Набързо ти правя едно резюме:

1. Четеш си входните данни. 

import java.util.Scanner;

public class Ex10LadyFuckingNew {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int  fieldSize  = Integer.parseInt(scanner.nextLine());

        int[] field = new int[fieldSize];

        String[] initialBugs = Arrays.stream(scanner.nextLine().split("[\\s]"))
                .filter(e-> !e.equals(""))
                .map(String::toString)
                .toArray(String[]::new);


        for (String initialBug : initialBugs) {
            int index = Integer.parseInt(initialBug);
            if (index >= 0 && index < fieldSize) {
                field[index] = 1;
            }
        }

        String command = scanner.nextLine() ;

2. Правиш си един while, в който те интересува само въртене до получаване на команда "end".

3. Вътре четеш първо един string, който ти инициализира индекса на калинката дето ще се мести, посоката й и разстояние ( string- а си го parse- ваш в съответни типове).

4. Първо проверяваш, аджеба тая калинка въобще вътре във fieldSize- а ли е или не и дали въобще в зададения индекс на калинка за местене bugToMove има въобще калинка, т.е. дали field[bugToMove] e празно == 0 или има бъгче. Ако тези условия не са изпълнени Stringa подаден в началото на цикъла се чете отново, понеже няма такъв индекс и/ или калинка.

5. Ако имаш калинка и е в границите на полето значи имаш и преместване на малката гад. Следователно първото нещо, което правиш е да сложиш 0 за стойност на индекса field[bugToMove] = 0;. Демек мести се => изпразва кутийката.

6. След като вече знаеш, че се движи и си я инициализирал преместването (field[bugToMove] = 0;) правиш проверка дали се движи на дясно или ляво. 

Ако е на дясно += разстоянието; (флъЛенгтх;)

7. Правиш един while, в който ако полето, в което трябва да се премести е заето ( 

field[bugToMove]==1) и индекса на калинката е вътре в размерността на полето (
bugToMove < fieldSize) , докато това е изпълнено калинката не спира да се мести на дясно с дължината(разстоянието), което не винаги е 1-ца ;).

8. След т.7 правим проверка дали индекса на калинката влиза в размерността (

bugToMove < fieldSize)

 и ако да отбелязваме полето с този индекс = 1, демек кацнала е. 

field[bugToMove] = 1;

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

9. Аналогично се прави и за ляво. Като тук има  

bugToMove -= flyLength;

Тук следим в while дали индекса на калинката е >= 0 е съответно дане би индекса на полето да е зает от друга гад. Ако е така изпълняваме -= flyLength; до пръсване.

правиш проверка дали индекса на калинката е >= 0, ако да влизаш за още една проверка ако влиза в размерността на полето заемаш съответния му индекс с 1.

10. Dолу пак си прочиташ командата и пак завърташ целия цикъл до команда "end"

11. От вън си правиш един цикъл през размерността на полето и принтваш резултата.

Заповядай линк на решението: https://pastebin.com/kPNTmyjX

Съжалявам, че не мога да ти помогна с твоя вариант на решение. Надявам се все пак това да ти помогне.

Успех!

 

П.С. Най- вероятно до дни, някой ще изкочи и с конкретно решение на твоя вариант :)

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