Олимпиадная задача. Максимальное количество различных этикеток. - C#

Узнай цену своей работы

Формулировка задачи:

Вася коллекционирует спичечные этикетки. Для этого у него есть N альбомов вместимостью K1, K2, …, KN этикеток. Вася хочет, чтобы в случае утери одного любого альбома каждая этикетка осталась у него хотя бы в одном экземпляре. Для этого он покупает каждую этикетку в двух экземплярах, и наклеивает их в два разных альбома. Какое максимальное количество различных этикеток при этом может оказаться в его коллекции?

Решение задачи: «Олимпиадная задача. Максимальное количество различных этикеток.»

textual
Листинг программы
  1. class Program
  2. {
  3.     static int[] array;
  4.  
  5.     static void Main(string[] args)
  6.     {
  7.         int albums = 0;
  8.         Console.Write("Введите количество альбомов: ");
  9.         while(!int.TryParse(Console.ReadLine(), out albums))
  10.         {
  11.             Console.Write("Введённое число некорректно, попробуйте ещё раз: ");
  12.         }
  13.  
  14.         array = new int[albums];
  15.         for(int i = 0; i < albums; i++)
  16.         {
  17.             int size = 0;
  18.             Console.Write("Введите размер {0} альбома: ", i+1);
  19.             while (!int.TryParse(Console.ReadLine(), out size))
  20.             {
  21.                 Console.Write("Введённое число некорректно, попробуйте ещё раз: ");
  22.             }
  23.             array[i] = size;
  24.         }
  25.  
  26.         int sum = 0;
  27.         for(int i = 0; i < array.Length-1; i++)
  28.         {
  29.             int max = FindMaximumIndex();
  30.             int premax = FindPreMaximumIndex(max);
  31.             sum += array[premax];
  32.             array[max] -= array[premax];
  33.             array[premax] = 0;
  34.         }
  35.  
  36.         Console.WriteLine("Максимальное число этикеток: {0}", sum);
  37.         Console.ReadLine();
  38.     }
  39.  
  40.     static int FindMaximumIndex()
  41.     {
  42.         int maximumIndex = 0;
  43.         int maximum = -1;
  44.  
  45.         for(int i = 0; i < array.Length; i++)
  46.         {
  47.             if(array[i] > maximum)
  48.             {
  49.                 maximum = array[i];
  50.                 maximumIndex = i;
  51.             }
  52.         }
  53.         return maximumIndex;
  54.     }
  55.  
  56.     static int FindPreMaximumIndex(int maxIndex)
  57.     {
  58.         int premaximumIndex = 0;
  59.         int premaximum = -1;
  60.  
  61.         for (int i = 0; i < array.Length; i++)
  62.         {
  63.             if(array[i] > premaximum && i != maxIndex)
  64.             {
  65.                 premaximum = array[i];
  66.                 premaximumIndex = i;
  67.             }
  68.         }
  69.         return premaximumIndex;
  70.     }
  71. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.462 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы