Loading...
darkata405 avatar darkata405 6 Точки

LadyBugs - 30/100 помощ ! :Д

Здравейте, aко може да ми ударите едно рамо ;д ! Предполагам всички вече сте страдали от тази задача и знаете коя е, но все пак ще ви дам условието : https://judge.softuni.bg/Contests/Practice/Index/333#1

моят код:
https://pastebin.com/vJCTVf95

Тагове:
0
Fundamentals Module
ivailogeimara avatar ivailogeimara 37 Точки
Best Answer

Щях да минавам през грешките ти и да обеснявам една по една какво е грешно и как да го оправиш но то цялата логика е грешна и всичко трябва да се пренапише, така че ще ти дам друго правилно решение и ще го обясня.

using System;
using System.Linq;

namespace practice

{
    class Program
    {
        static void Main(string[] args)
        {
            int fieldSize = int.Parse(Console.ReadLine());
            int[] bugs = new int[fieldSize];
            int[] initialPositions = Console.ReadLine().Split().Select(int.Parse).ToArray();

            foreach (int index in initialPositions)
            {
                if ((index >=0) && (index < fieldSize))
                    bugs[index] = 1;
            }

            string command;
            while (!(command = Console.ReadLine()).Equals("end"))
            {
                string[] commandTokens = command.Split(" ").ToArray();
                int bugIndex = int.Parse(commandTokens[0]);
                string direction = commandTokens[1];
                int distance = int.Parse(commandTokens[2]);
                if (direction.Equals("left") && (distance != 0))
                    distance = -distance;

                bool bugIdxOutsideField = (bugIndex < 0) || (bugIndex >= bugs.Length);
                if (bugIdxOutsideField)
                    continue;
                bool bugExists = bugs[bugIndex] == 1;
                if (!bugExists || (distance == 0))
                    continue;

                bugs[bugIndex] = 0;            
                if ((bugIndex + distance) < 0 || (bugIndex + distance) >= bugs.Length)
                    continue;

                bool bugInPosition;
                do
                {
                    bugIndex += distance;
                    if ((bugIndex < 0) || (bugIndex >= bugs.Length))
                        break;
                    bugInPosition = bugs[bugIndex] == 1;
                    bugs[bugIndex] = 1;
                } while (bugInPosition);
            }

            Console.WriteLine(string.Join(" ", bugs));
        }
    }
}

Първо естествено минаваме през дадените първоначални позиции и слагаме там буболечки като проверяваме дали дадената позиция не е извън полето (или масив-а).

За всеки ред си парсване input-а.

Проверяваме дали дадената посоката (direction) от командата е наляво и ако е, обръщаме дистанцията (distance) от положителна в отрицателна или от отрицателна в положителна (ред 28-29). Защото ако посоката (direction) е надясно (т.е. нормалната посока) ще прибавяме дистанцията (distance) към текущата позиция и така ако дистанцията (distance) е положителна новата позиция ще е по-надясно. Ако дистанцията (distance) е отрицателна и вървим надясно (direction = "right") ще трябва да вървим на обратно (т.е. наляво). Ако обаче посоката е наляво при положителна дистанция ще трябва да вървим наляво т.е. ще трябва да изваждаме дистанцията или да прибавяме отрицателна дистанция (което аз правя). При отрицателна дистанция ще трябва да вървим нядясно т.е. ще трябва да прибавяме дистанцията т.е. трябва да стане положителна. (ред 31-33)

После проверяваме дали дадения индекс на бобулечка която да местим е валиден (в рамките на полето/масива) (bugIdxOutsideField). Ако е извън полето (т.е. не е валиден) продължаваме към следващата итерация/команда. (ред 31-33)

След това проверяваме дали има бобулечка на дадения индекс, която да местим и дали дистанцията не е нула (т.е. дали има смисъл да местим). Ако няма бобулечка или дистанцията е 0 продължаваме към следващата итерация/команда. (ред 34-36)

Ако успеем да продължим по нататък в кода значи ще местим със сигурност т.е. може да зададем на текущия индекс от който местим, да няма бобулечка. После проверяваме дали ще излезем от полето след като преместим и ако да продължаваме към следващата итерация/команда, защото вече сме махнали бобулечката от началната й позиция и ако ще излезе от полето не трябва да правим нищо друго. (ред 38-40)

След това правим цикъл в който местим бобулечката. Местим индекс-а с дистанцията (bugIndex += distance) и ако излиза от полето приключваме цикъла. Ако не проверяваме дали има бобулечка на новата позиция (новия индекс), Ако има въртим още 1 итерация на цикъла. И така докато излезем от полето или попаднем да позиция в която няма бобулечка. (ред 42-50)

0
19/03/2020 11:35:06
darkata405 avatar darkata405 6 Точки

Лелее, страшно много благодаря за изчерпателния отговор !!!

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