Advertisement
VladoG

[PF] - Problem 2. Entertrain

Aug 22nd, 2017
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.93 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace Problem_2.Entertrain
  8.     {
  9.     class Entertrain
  10.         {
  11.         static void Main(string[] args)
  12.             {
  13.             // Четеш силата на ЛОКОМОТИВА;
  14.             string inputLine = Console.ReadLine();
  15.             int locomotivePower = int.Parse(inputLine);
  16.             List<int> wagonsList = new List<int>(); // Инициализираме празен лист, в който ще записваме вагоните
  17.             // тук ще записваме тежестта на всички вагони до момента
  18.             int totalWagonWeight = 0;
  19.             // тук ще записваме средно-аритметичната стойност на списъка с вагони
  20.             int averageWagonWeight = 0;
  21.  
  22.             // тук ще записваме индекса на евентуалния вагон, който ще трябва да махнем от списъка ако се превиши силата на локомотива / едновременно с това ще използваме тази променлива и като флаг - ако не си е променила стойността (-1), значи ням елемент за триене, ако е станала >= от нула, евентулано ще трием елемент с този индекс, колкото е стойността на removedElementIndex
  23.             int removedElementIndex = -1;
  24.             int counter = 0;
  25.             // Избираме най-голямото възможно цяло число, за да сме сигурни, че разликата още между първия елемент и средното-аритметичното число, няма да се окаже по-голяма от началната стойност на тази променлива (closestWeight) - сигурни сме в това, понеже разликата на две цели числа няма как да е по-голяма от най-голямото цяло число
  26.             int closestWeight = Int32.MaxValue;
  27.  
  28.             // С цикъла четеш само ТОНАЖА на ВАГОНИТЕ, докато получиш командата за край: All ofboard!
  29.             while ((inputLine = Console.ReadLine()) != "All ofboard!")
  30.                 {
  31.                 //тук при всяко завъртане четеш стойност от конзолата за всеки вагон и ги записваш в някакъв списък (според каквото сте учили и каквото е най-удобно) - List, Array, ...
  32.  
  33.                 int currentWagon = int.Parse(inputLine); // тежестта на текущия вагон
  34.                 wagonsList.Add(currentWagon); // записваме тежестта на текущия вагон
  35.                 totalWagonWeight = totalWagonWeight + currentWagon;
  36.  
  37.                 if (totalWagonWeight > locomotivePower)
  38.                     {
  39.                     // с цикъла тръсим средната стойност на всички вагони въведени до момента
  40.                     for (int i = 0; i < wagonsList.Count; i++)
  41.                         {
  42.                         // Сумираме тежеста на всички вагони до момента
  43.                         averageWagonWeight = averageWagonWeight + wagonsList[i];
  44.                         }
  45.                     // СРЕДНО АРИТМЕТИЧНО - сумата делим на броя на вагоните - колкото елемента/брой вагони има записани в List
  46.                     averageWagonWeight = averageWagonWeight / wagonsList.Count;
  47.  
  48.                     // Претърсваме списъка, за да намерим елемента, който е с най-близка стойност до средно-аритметичната за целия списък от вагони
  49.                     while (counter < wagonsList.Count)
  50.                         {
  51.                         if ((Math.Abs(averageWagonWeight - wagonsList[counter])) < closestWeight)
  52.                             {
  53.                             closestWeight = Math.Abs(averageWagonWeight - wagonsList[counter]);
  54.                             // Зашисваме индекса в списъка на намерения най-близък елелент, който после трябва да премахнем от списъка с вагони
  55.                             removedElementIndex = counter;
  56.                             }
  57.                         counter++;
  58.                         }
  59.  
  60.                     // Ако removedElementIndex си е променил началната стойност, с която сме го инициализирали (-1), значи в горната проверка в цикъла while сме намерили елемент, който трябва да премахнем
  61.                     if (removedElementIndex >= 0)
  62.                         {
  63.                         // Премахваме елемента с намерения индекс - removedElementIndex
  64.                         wagonsList.RemoveAt(removedElementIndex);
  65.                         // Инициализираме отново променливата с началната и стойност (-1), което ние сме решили, че ще означава, че нямаме в момента елемнт, който да трием от списъка с вагони
  66.                         removedElementIndex = -1;
  67.                         }
  68.  
  69.                     // Инициализираме тези променливи отново с началната им стойност, за да може при следващата стъпка на цикъла при приемане на следващ вагон, проверката за евентуален вагон, който ще махнем, ако тонажа им се окаже по-голям от силата на локомотива да започне от начало (за да не става натрупване на стойностите => невярно съдържание)
  70.                     counter = 0;
  71.                     averageWagonWeight = 0;
  72.                     closestWeight = Int32.MaxValue;
  73.                     }
  74.                 }
  75.  
  76.  
  77.             // Реверсваме/Обръщаме списъка обратно
  78.             wagonsList.Reverse();
  79.  
  80.             // Печатаме на конзолата резултата
  81.             Console.Write(string.Join(" ", wagonsList));
  82.             Console.WriteLine(" " + locomotivePower);
  83.  
  84.             }
  85.         }
  86.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement