Олимпиадная задача. Максимальное количество различных этикеток. - C#
Формулировка задачи:
Вася коллекционирует спичечные этикетки. Для этого у него есть N альбомов вместимостью K1, K2, …, KN этикеток. Вася хочет, чтобы в случае утери одного любого альбома каждая этикетка осталась у него хотя бы в одном экземпляре. Для этого он покупает каждую этикетку в двух экземплярах, и наклеивает их в два разных альбома. Какое максимальное количество различных этикеток при этом может оказаться в его коллекции?
Решение задачи: «Олимпиадная задача. Максимальное количество различных этикеток.»
textual
Листинг программы
- class Program
- {
- static int[] array;
- static void Main(string[] args)
- {
- int albums = 0;
- Console.Write("Введите количество альбомов: ");
- while(!int.TryParse(Console.ReadLine(), out albums))
- {
- Console.Write("Введённое число некорректно, попробуйте ещё раз: ");
- }
- array = new int[albums];
- for(int i = 0; i < albums; i++)
- {
- int size = 0;
- Console.Write("Введите размер {0} альбома: ", i+1);
- while (!int.TryParse(Console.ReadLine(), out size))
- {
- Console.Write("Введённое число некорректно, попробуйте ещё раз: ");
- }
- array[i] = size;
- }
- int sum = 0;
- for(int i = 0; i < array.Length-1; i++)
- {
- int max = FindMaximumIndex();
- int premax = FindPreMaximumIndex(max);
- sum += array[premax];
- array[max] -= array[premax];
- array[premax] = 0;
- }
- Console.WriteLine("Максимальное число этикеток: {0}", sum);
- Console.ReadLine();
- }
- static int FindMaximumIndex()
- {
- int maximumIndex = 0;
- int maximum = -1;
- for(int i = 0; i < array.Length; i++)
- {
- if(array[i] > maximum)
- {
- maximum = array[i];
- maximumIndex = i;
- }
- }
- return maximumIndex;
- }
- static int FindPreMaximumIndex(int maxIndex)
- {
- int premaximumIndex = 0;
- int premaximum = -1;
- for (int i = 0; i < array.Length; i++)
- {
- if(array[i] > premaximum && i != maxIndex)
- {
- premaximum = array[i];
- premaximumIndex = i;
- }
- }
- return premaximumIndex;
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д