Loading...
Denislava91 avatar Denislava91 5 Точки

5. Bomb Numbers/ C# Fundamentsls/Lists Exercise

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

Бих искала да ви помоля за малко помощ за следната задача, на която изкарвам 75% в Judge с един гримнал тест и не мога да разбера защо.

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

namespace _05.Bomb_Numbers_2
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> bombNumbers = Console.ReadLine().Split().Select(int.Parse).ToList();
            List<int> specialNumPow = Console.ReadLine().Split().Select(int.Parse).ToList();

            int specialNum = specialNumPow[0];
            int power = specialNumPow[1];

            if (bombNumbers.Contains(specialNum))

            {

                for (int i=0;i<bombNumbers.Count;i++)

                {
                    if (bombNumbers[i] == specialNum)

                    {
                        int startIndex = GetStartIndex(bombNumbers, specialNum, power);
                        int count = GetCount(bombNumbers, specialNum, power, startIndex);
                        bombNumbers.RemoveRange(startIndex, count);
                    }

                    else

                    {
                        continue;
                    }
                }
                

                int sum = bombNumbers.Sum();

                Console.WriteLine(sum);

            }

            else

            {
                return;
            }

        }

        private static int GetStartIndex(List<int> bombNumbers, int specialNum,int power)

        {
            int indexSpecialNum = bombNumbers.IndexOf(specialNum);
            int startIndex = 0;

            if (indexSpecialNum - power >= 0)

            {
                startIndex = indexSpecialNum - power;
            }

            else
            {
                startIndex = 0;
            }

            return startIndex;
        }

        private static int GetCount(List<int> bombNumbers, int specialNum, int power,int startIndex)

        {
            int indexSpecialNum = bombNumbers.IndexOf(specialNum);
            int count = 0;

            if (indexSpecialNum + power <= bombNumbers.Count - 1)

            {
                for (int i = startIndex; i <= indexSpecialNum + power; i++)

                {
                    count++;

                }
            }

            else

            {
                for (int i = startIndex; i <= bombNumbers.Count-1; i++)

                {
                    count++;

                }

            }

            return count;

        }
    }
}

Много ще съм ви благодарна, ако споделите мнения!

 

Поздрави.

 

Дени

Тагове:
0
Module: C# Advanced
nickwork avatar nickwork 657 Точки

Като за начало ти пускам едно по кратко решение, което дава 100/100 да разгледаш.

Твоето решение иска малко корекция - пробвай да пуснеш тези стойности като вход и ще разбереш къде ти е грешката, ако не можеш да го поправиш сама пиши ще помогна :)

//1 4 2 4 2 2 2 9

4 2

//1 9 4 2 8 9 1

9 3

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

public class AppendArrays
{
    public static void Main()
    {

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

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

        int bomb = bombPower[0];
        int power = bombPower[1];

        for (int i = 0; i < inputNums.Count; i++)
        {
            if (inputNums[i] == bomb)
            {
                if (i + power > inputNums.Count - 1)
                {
                    power = inputNums.Count - 1 - i;
                }

                inputNums.RemoveRange(i, power + 1);
                
                power = bombPower[1];
                
                int leftSide = i - power;

                if (i - power < 0)
                {
                    leftSide = 0;

                    if (power > inputNums.Count - 1)
                    {
                        power = inputNums.Count;
                    }

                }

                inputNums.RemoveRange(leftSide, power);

                i = 0;
            }
        }

        Console.WriteLine(string.Join(" ", inputNums.Sum()));
    }
}

0
DimitarKazakov avatar DimitarKazakov 17 Точки

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

namespace Bombers
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> numbers = Console.ReadLine().Split(" ", StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList();
            int[] bombInfo = Console.ReadLine().Split(" ", StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray();
            int bomb = bombInfo[0];
            int power = bombInfo[1];

            

            while (numbers.Contains(bomb))
            {
                int indexOfBomb = numbers.IndexOf(bomb);
                int startIndex = indexOfBomb - power;
                int endIndex = indexOfBomb + power;

                CheckIfIndexesAreInBounds(numbers, ref startIndex, ref endIndex);

                Detonation(numbers, startIndex, endIndex);

            }

            Console.WriteLine(numbers.Sum());
            
        }

        private static void Detonation(List<int> numbers, int startIndex, int endIndex)
        {
            int rangeToRemove = endIndex - startIndex + 1;

            numbers.RemoveRange(startIndex, rangeToRemove);
        }

        private static void CheckIfIndexesAreInBounds(List<int> numbers, ref int startIndex, ref int endIndex)
        {
            if (startIndex < 0)
            {
                startIndex = 0;
            }
            if (endIndex > numbers.Count - 1)
            {
                endIndex = numbers.Count - 1;
            }
        }
    }
}

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