Loading...
rado_dimovm avatar rado_dimovm 0 Точки

Проблем задача 05. Bomb Numbers C#

Здравейте, колеги

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

https://pastebin.com/ayv1Zyhy

0
Fundamentals Module
E.Erol avatar E.Erol 13 Точки

Здравей, при мен беше същият проблем, когато изтривах съответният индекс. Накрая реших индекса да е равно на 0,а не да го изтривам и мина в judge.
Ето и решенията:

RemoveAt - 75/100 : https://pastebin.com/zJSrn9QS
index = 0 - 100/100 : https://pastebin.com/rsQNJKLe

0
heidan avatar heidan 2 Точки

Доста се мъчих и не успях. Решението ти е супер.

0
Joro_Paspalev avatar Joro_Paspalev 23 Точки

Здравейте, 

втори ден вече се мъча да мина от 75 на 100/100 със същия код като на колегата E.Erol RemoveAt - 75/100 : https://pastebin.com/zJSrn9QS.

Най-накрая ми светна че ако има 2 бомби една до друга при преминаване от една итерация на главния цикъл към следващата се пропуска номер на бомба и затова дава грешка на първи тест. Трябва просто когато се изтрият всички елементи преди да се завърти следващата итерация да се сложи i--; 

Ето примерен вход на това което казвам:

[4 4 4 2 3 4 7]

4 1

Ето и решение което дава 100/100 в Judge:

List<int> numbers = Console.ReadLine()
                .Split()
                .Select(int.Parse)
                .ToList();

            List<int> elements = Console.ReadLine()
                .Split()
                .Select(int.Parse)
                .ToList();

            int bombNum = elements[0];
            int power = Math.Abs( elements[1]);

            // Обхождам целия масив и търся дали ще намеря елемент равен на числото на бомбата
            for (int i = 0; i < numbers.Count; i++)
            {
                if (numbers[i] == bombNum)
                {
                    // Търся началната точка от къде да започна да трия
                    int start = i - power;

                    // Ако началната точка е извън пределите на индекса т.е. под нулевия индекс му казвам да започва от нулевия
                    if (start < 0)
                    {
                        start = 0;
                    }

                    // Търся крайната точка до къде да трия
                    int finish = i + power + 1;

                    // Ако крайния индекс за триене е по-голям от броя елементи, то тогава края му давам да бъде равен на number.count защото иначе Exeption
                    if (finish > numbers.Count)
                    {
                        finish = numbers.Count;
                    }

                    // След като имам начална и крайна точка въртя ги в цикъл и ги трия
                    for (int j = start; j < finish; j++)
                    {
                        numbers.RemoveAt(start);
                    }
                    i--;
                }
            }

            Console.WriteLine(numbers.Sum());

 

0
Savas avatar Savas 38 Точки

Благодаря момчета...

и аз се травмирах доста с тази задача и пропускът ми беше същия както при вас.
Затова смятам от тук нататък - ако правя промени в List докато го въртя в цикъл - ако е имало промяна направо да стартирам обхождане от i = 0 или ако ползвам while да му слагам условие while (testList.Contains(въпроснияЕлемент) ... което си е пак пълно обождане преди всеки лооп.

Верно, че неможе да се генерализира (зависи от конкретната ситуация) но, по-добре човек да си "върже гащите" (да си вземе 100/100 на изпита) от колкото да плете тънки логики, където не е ясно къде ще изгърмят и докато дебъгва - изпита де минал... 

Още веднъж благодаря 

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