Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace Problem_2.Entertrain
- {
- class Entertrain
- {
- static void Main(string[] args)
- {
- // Четеш силата на ЛОКОМОТИВА;
- string inputLine = Console.ReadLine();
- int locomotivePower = int.Parse(inputLine);
- List<int> wagonsList = new List<int>(); // Инициализираме празен лист, в който ще записваме вагоните
- // тук ще записваме тежестта на всички вагони до момента
- int totalWagonWeight = 0;
- // тук ще записваме средно-аритметичната стойност на списъка с вагони
- int averageWagonWeight = 0;
- // тук ще записваме индекса на евентуалния вагон, който ще трябва да махнем от списъка ако се превиши силата на локомотива / едновременно с това ще използваме тази променлива и като флаг - ако не си е променила стойността (-1), значи ням елемент за триене, ако е станала >= от нула, евентулано ще трием елемент с този индекс, колкото е стойността на removedElementIndex
- int removedElementIndex = -1;
- int counter = 0;
- // Избираме най-голямото възможно цяло число, за да сме сигурни, че разликата още между първия елемент и средното-аритметичното число, няма да се окаже по-голяма от началната стойност на тази променлива (closestWeight) - сигурни сме в това, понеже разликата на две цели числа няма как да е по-голяма от най-голямото цяло число
- int closestWeight = Int32.MaxValue;
- // С цикъла четеш само ТОНАЖА на ВАГОНИТЕ, докато получиш командата за край: All ofboard!
- while ((inputLine = Console.ReadLine()) != "All ofboard!")
- {
- //тук при всяко завъртане четеш стойност от конзолата за всеки вагон и ги записваш в някакъв списък (според каквото сте учили и каквото е най-удобно) - List, Array, ...
- int currentWagon = int.Parse(inputLine); // тежестта на текущия вагон
- wagonsList.Add(currentWagon); // записваме тежестта на текущия вагон
- totalWagonWeight = totalWagonWeight + currentWagon;
- if (totalWagonWeight > locomotivePower)
- {
- // с цикъла тръсим средната стойност на всички вагони въведени до момента
- for (int i = 0; i < wagonsList.Count; i++)
- {
- // Сумираме тежеста на всички вагони до момента
- averageWagonWeight = averageWagonWeight + wagonsList[i];
- }
- // СРЕДНО АРИТМЕТИЧНО - сумата делим на броя на вагоните - колкото елемента/брой вагони има записани в List
- averageWagonWeight = averageWagonWeight / wagonsList.Count;
- // Претърсваме списъка, за да намерим елемента, който е с най-близка стойност до средно-аритметичната за целия списък от вагони
- while (counter < wagonsList.Count)
- {
- if ((Math.Abs(averageWagonWeight - wagonsList[counter])) < closestWeight)
- {
- closestWeight = Math.Abs(averageWagonWeight - wagonsList[counter]);
- // Зашисваме индекса в списъка на намерения най-близък елелент, който после трябва да премахнем от списъка с вагони
- removedElementIndex = counter;
- }
- counter++;
- }
- // Ако removedElementIndex си е променил началната стойност, с която сме го инициализирали (-1), значи в горната проверка в цикъла while сме намерили елемент, който трябва да премахнем
- if (removedElementIndex >= 0)
- {
- // Премахваме елемента с намерения индекс - removedElementIndex
- wagonsList.RemoveAt(removedElementIndex);
- // Инициализираме отново променливата с началната и стойност (-1), което ние сме решили, че ще означава, че нямаме в момента елемнт, който да трием от списъка с вагони
- removedElementIndex = -1;
- }
- // Инициализираме тези променливи отново с началната им стойност, за да може при следващата стъпка на цикъла при приемане на следващ вагон, проверката за евентуален вагон, който ще махнем, ако тонажа им се окаже по-голям от силата на локомотива да започне от начало (за да не става натрупване на стойностите => невярно съдържание)
- counter = 0;
- averageWagonWeight = 0;
- closestWeight = Int32.MaxValue;
- }
- }
- // Реверсваме/Обръщаме списъка обратно
- wagonsList.Reverse();
- // Печатаме на конзолата резултата
- Console.Write(string.Join(" ", wagonsList));
- Console.WriteLine(" " + locomotivePower);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement