Олимпиадная задача. Максимальное количество различных этикеток. - 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; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д