Advertisement
Guest User

Untitled

a guest
Jun 25th, 2018
950
1
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. В городском зоопарке содержатся животные n разных видов. Для участия в международной выставке «Три твари» зоопарк должен представить трех животных различных видов.
  3. Требуется написать программу, которая вычислит число способов выбрать трех животных для участия в выставке.
  4. Например, если в зоопарке два медведя, тигр, лев и пингвин, то есть семь способов выбрать трех животных:
  5.     первый медведь, тигр и лев;
  6.     первый медведь, тигр и пингвин;
  7.     первый медведь, лев и пингвин;
  8.     второй медведь, тигр и лев;
  9.     второй медведь, тигр и пингвин;
  10.     второй медведь, лев и пингвин;
  11.     тигр, лев и пингвин.
  12. Входной текстовый файл INPUT.TXT содержит в первой строке натуральное число n – количество видов животных в городском зоопарке (1 ≤ n ≤ 1000). Во второй строке через пробел записаны n натуральных чисел – количество животных соответствующего вида. Число животных каждого вида не превышает 1000.
  13. Выходной текстовый файл OUTPUT.TXT должен содержать одно число – количество способов выбрать трех животных для международной выставки.
  14. Для выполнения программы максимальное время выполнения составляет 0,5 секунд, память ограничена в 16 мегабайт.
  15. Анализ задачи
  16. Так как все данные автоматически вводятся системой тестирования, то нет необходимости реализовать проверку ввода.
  17. Данная задача явно подразумевает использование комбинаторики. Самое простым решением было бы найти все возможные сочетания трех разных видов животных без учета порядка расположения этих видов. Однако количество видов животных может достигать 1000, поэтому количество всевозможных комбинаций становится очень большим, поэтому используем другой подход для решения данной задачи.
  18. Будем использовать методику динамического программирования. Его суть состоит в том, чтобы разбить одну большую задачу на менее сложные подзадачи, затем решив их, использовать полученные результаты для решения основной задачи.
  19. В данном случае мы будем считывать количество животных одного вида и обновлять данные для количества комбинаций. Главным будет то, что мы также будем считать количество комбинаций ещё для ситуаций, где нам бы потребовалось выставить на выставку один и два вида животных.
  20. Функциональные требования: программа должна давать однозначный верный ответ на заданные входные данные, ввод и вывод данных осуществляется через команды консоли.
  21. Нефункциональные требования: время выполнения программы ограничено 0,5 секунды. Память ограничена 16 мегабайтами.
  22. Требования к входным данным: все числа натуральные и не превышают 1000.
  23. Формат входных данных:
  24.     Количество видов – число формата int;
  25.     Количество особей каждого вида – число формата int;
  26. Формат выходных данных:
  27.     Количество сочетаний — число формата int64
  28. Худший расклад: количество видов 1000, и особей в каждом виде тоже 1000, уже понятно, что количество комбинаций будет невероятно большим, поэтому заранее будем использовать int64.
  29. Разработка алгоритма
  30. Записываем количество животных каждого вида в одним массив. Затем последовательно идём по массиву и пересчитываем количество комбинаций. Для вычисления комбинаций 1 вида получаем следующую формулу (1)
  31.     C_1=C_1+k_i
  32. где С1 – количество комбинаций для 1 вида,
  33. ki – количество животных текущего вида.
  34. Для вычисления комбинаций 2 видов получаем следующую формулу (2)
  35.     C_2=C_2+С1×ki
  36.  
  37. где С2 – количество комбинаций для 2 видов,
  38. Для вычисления комбинаций 3 видов формула будет иметь вид (3)
  39.     C_3=C_3+С2×ki
  40.  
  41. где С3 – количество комбинаций для 3 видов.
  42. Реализация
  43. Листинг программы прикреплён к приложению (прил. С).
  44. Для ввода и вывода использовались стандартные консольные методы.
  45. Решение задачи не потребовало написания дополнительных методов или классов.
  46. Тестирование
  47. Результаты тестирования в системе acmp представлены ниже (рис 2.1). Номер решения 8451632.
  48.  
  49. Результат тестирования
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement