Loading...
AnzhelaNurieva avatar AnzhelaNurieva 4 Точки

04.*Drum Set

Код => https://pastebin.com/knuaVCrc / първият вход ми излиза дебъгвах над 10 пъти всичко работи както е по условие на втори вход се чупи с малки разлики в крайната сума, и първото число в листа.. 

Условие: => https://softuni.bg/trainings/resources/officedocument/52610/lists-more-exercise-csharp-fundamentals-september-2020/3135

 

Тагове:
0
Programming Fundamentals
Axiomatik avatar Axiomatik 2422 Точки

Subtraction logic inside of the while-loop can be simplified, but the main-reason why output wasn't correct for the second test was that the index of the for-loop has to be decreased by one in order to compensate for the removed element in both drum collections(line 70). Each drum needs to be removed from both collections, since at a later stage this can lead to problems when multiple drums are removed. Also included alternative logic to replace for-loop.

Code:

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

namespace _04._Drum_Set
{
    class Program
    {
        static void Main(string[] args)
        {
            double savingMoney = double.Parse(Console.ReadLine());
            List<int> drumSet = Console
                            .ReadLine()
                            .Split()
                            .Select(int.Parse)
                            .ToList();

            List<int> newDrumSet = new List<int>(drumSet);
            string command = Console.ReadLine();

            while (command != "Hit it again, Gabsy!")
            {

                // Alternative 
                //int hitPower = int.Parse(command);
                //newDrumSet = newDrumSet
                //    .Select(d => d -= hitPower)
                //    .ToList();

                //while (newDrumSet.Any(d => d <= 0))
                //{
                //    int index = newDrumSet.FindIndex(d => d <= 0);
                //    int newDrumPrice = drumSet[index] * 3;
                //    if (newDrumPrice <= savingMoney)
                //    {
                //        newDrumSet[index] = drumSet[index];
                //        savingMoney -= newDrumPrice;
                //    }
                //    else
                //    {
                //        drumSet.Remove(drumSet[index]);
                //        newDrumSet.Remove(newDrumSet[index]);
                //    }
                //}


                for (int i = 0; i < newDrumSet.Count; i++)
                {
                    newDrumSet[i] -= int.Parse(command);

                    //bool containsNegative = newDrumSet.Any(i => i < 0);

                    if (newDrumSet[i] <= 0)
                    {
                        //newDrumSet.RemoveAll(i => i < 0);

                        int spendMoney = drumSet[i] * 3;

                        if (spendMoney <= savingMoney)
                        {
                            //newDrumSet.Insert(i, drumSet[i]);
                            newDrumSet[i] = drumSet[i];
                            savingMoney -= spendMoney;
                        }
                        else
                        {
                            drumSet.Remove(drumSet[i]);
                            newDrumSet.Remove(newDrumSet[i]);
                            i--;
                        }
                    }
                }
                command = Console.ReadLine();
            }

            Console.WriteLine(string.Join(" ", newDrumSet));
            Console.WriteLine($"Gabsy has {savingMoney:F2}lv.");
        }
    }
}

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