Професионална програма
Loading...
+ Нов въпрос
AnzhelaNurieva avatar AnzhelaNurieva 1 Точки

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 437 Точки

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