Loading...
Iv_Konov avatar Iv_Konov 383 Точки
Best Answer

Здравей,

 

Прилагам ти решение на C# с два метода, но... и решението на Лора е напълно разбираемо и също ще ти помогне. Min/Max идеята ѝ за ограничаване на обсега на изтриване е готина.

 

Освен излизането извън колекцията при изтриването на radious-ите.... Имай предвид, че при изтриване объркваш броенето на for цикъл-а. Примерно, ако са ти останали тези двойки за изтриване:

2 2 2

В началото i = 0 и изтриваш двойка с индекс 0. На следващото кръгче i  = 1, но след като си изтрил първата двойка следващата двойка е с индекс 0, но вече i = 1, а дължината на колекцията намалява (вече е 2)  и в крайна сметка изпускаш да изтриваш на нулевия индекс последната двойка...

=

            for (int i = 0; i < input.Count; i++)
            {
                input.Remove(bomb[0]);
            }

=

 

Без да се налага да правиш корекции на броенето на i-то, може да ползваш подобно решение:

=

           while (input.Contains(bomb[0]))
            {
                input.Remove(bomb[0]);
            }

=

 

Сумиране на елементите на колекция. Може да ползваш вместо това:

=

           for (int i = 0; i < input.Count; i++)
            {
                sum += input[i];
            }
            Console.WriteLine(sum);

=

този метод:

=

Console.WriteLine(numList.Sum());

=

 


 

===

using System;
using System.Collections.Generic;
using System.Linq;

namespace _05._Bomb_Numbers
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> numList = Console.ReadLine().Split().Select(int.Parse).ToList();
            int[] bombArr = Console.ReadLine().Split().Select(int.Parse).ToArray();

            int itemToKill = bombArr[0];
            int rangeToKill = bombArr[1];
            int index = 0;

            while (numList.Contains(itemToKill))
            {                
                index = numList.IndexOf(itemToKill);

                int leftRange = rangeToKill;
                int rightRange = rangeToKill;

                if (index - leftRange < 0) // тук ограничавам обсега на изтриване да не излиза извън индексите на колекцията
                {
                    leftRange = index;
                }

                if (index + rightRange >= numList.Count) // тук ограничавам обсега на изтриване да не излиза извън индексите на колекцията
                {
                    rightRange = numList.Count - index - 1;
                }

                numList.RemoveRange(index - leftRange, leftRange + rightRange + 1);
            }
            
            Console.WriteLine(numList.Sum());
        }
    }
}
===

 

Поздрави,

Иван

0
23/06/2019 18:29:53
KrasenPenev avatar KrasenPenev 2 Точки

Извинявай колега , но би ли ми обеснил защо си задал removeRange така :  numList.RemoveRange(index - leftRange, leftRange + rightRange + 1); . Аз не можех да се обесня иначе горната част е разбрах . Предварително благодаря :) 

0
Iv_Konov avatar Iv_Konov 383 Точки

Здравей,
пробвай това за разбиране:
1 4 4 2 8 9 1
0 1 2 3 4 5 6 - индекси
9 3

 

===
public void RemoveRange(int index, int count); - това е обяснение на RemoveRange
numList.RemoveRange(index - leftRange, leftRange + rightRange + 1);

1.
index - leftRange ->  5 - 3 = 2 индекс (число 4), а индекс 5 е на "9" 
index - leftRange -> ако е по-малко от нула се коригира в "0" - описано по-горе

2.
leftRange + rightRange + 1 - ляво + дясно + елемента на 9-та

rightRange - в този момент е извън индексите на колекцията и трябва да го намалим
rightRange = numList.Count - index - 1 -> 6 - 5 = 1  
numList.Count - 1 = 6
index на 9 е = на 5 
=> 6 - 5 = 1 - това е елемента в дясно

leftRange + rightRange + 1  -> 3 + 1 + 1 = 5 елемента -> 4 2 8 9 1
===

 

Поздрави,
Иван

0
LoraOrliGeorgieva avatar LoraOrliGeorgieva 39 Точки

Здравей, хвърля OutOfRange в случая, когато трябва да премахнеш 3 числа след девятката. Тук обаче имаме само едно и махаме само него.
Тук можеш да отркриеш промерно решение на Java. :) 
 

0
ShaipLovchali avatar ShaipLovchali 0 Точки

Браво. Страхотно решение!

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