Главная страница
Навигация по странице:

  • Входные данные Входные данные будут состоять из серии пар целых чисел i и j, одна пара чисел в строке. Все целые числа будут меньше 1 000 000 и больше 0.Решение

  • Результат программы

  • Входные данные

  • Задача 1.1 (Задача 3n 1). лр1. Задача 1 (Задача 3n 1)


    Скачать 0.68 Mb.
    НазваниеЗадача 1 (Задача 3n 1)
    АнкорЗадача 1.1 (Задача 3n 1
    Дата19.12.2021
    Размер0.68 Mb.
    Формат файлаdocx
    Имя файлалр1.docx
    ТипЗадача
    #308783

    Задача 1.1 (Задача 3n + 1)

    Рассмотрим следующий алгоритм генерации последовательности чисел. Начнем с целого числа n. Если n четно, то поделим на 2. Если n нечетно, то умножим на 3 и добавим 1. Будем повторять этот процесс с новым, полученным n, пока n не станет равным 1. Например, для n = 22 будет сгенерирована следующая последовательность чисел:

    22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

    Полагают (но это еще не доказано), что этот алгоритм сведется к n = 1 для любого целого n. По крайней мере, это предположение верно для всех целых чисел до 1 000 000.

    Для данного n длиной цикла n будем называть число сгенерированных чисел до и включая 1. В примере, приведенном выше, длина цикла 22 равна 16. Для двух заданных чисел i и j вы должны определить максимальную длину цикла для всех чисел между i и j, включая обе конечные точки.

    Входные данные

    Входные данные будут состоять из серии пар целых чисел i и j, одна пара чисел в строке. Все целые числа будут меньше 1 000 000 и больше 0.

    Решение

    Сначала вводим i и j с помощью объекта cin и оператора ">>".



    Чтобы для двух заданных чисел i и j определить максимальную длину цикла для всех чисел между i и j, включая обе конечные точки, создаем цикл.




    Выводим i и j и максимальную длину цикла с помощью объекта cout и оператора "<<".


    Результат программы


    Задача 2.1 (Yahtzee)

    В игре Yahtzee используются пять игральных костей, которые бросаются в 13 раундах. Протокол результатов содержит 13 категорий. Счет за каждый раунд может быть записан в категорию по выбору игрока, но в каждую категорию счет можно записывать только один раз. Счет в эти 13 категорий записывается следующим образом:

    • единицы - сумма всех выброшенных единиц;

    • двойки - сумма всех выброшенных двоек;

    тройки - сумма всех выброшенных троек;

    • четверки - сумма всех выброшенных четверок; пятерки - сумма всех выброшенных пятерок; шестерки - сумма всех выброшенных шестерок; шанс - сумма чисел на всех костях;

    • три одинаковые - сумма чисел на всех костях, при условии, что как минимум три из них имеют одно и то же значение;

    • четыре одинаковые - сумма чисел на всех костях, при условии, что как минимум четыре из них имеют одно и то же значение;

    короткий стрит - 25 очков, при условии, что четыре кости образуют последовательность (то есть 1, 2, 3,4, или 2, 3,4, 5, или 3,4, 5, 6);

    • короткий стрит - 35 очков, при условии, что все кости образуют последовательность (то есть 1, 2, 3,4, 5 или 2, 3,4, 5, 6);

    • фулл-хаус - 40 очков, при условии, что на трех костях выпало одно и то же число и на оставшихся двух костях также выпало одно и то же число.

    Каждая из последних шести категорий может быть засчитана за 0 очков, если необходимые условия не выполняются.

    Счетом игры является сумма всех 13 категорий плюс дополнительные 35 очков, если сумма первых шести категорий 63 или больше.

    Ваша задача - рассчитать максимальный счет для последовательности раундов.

    Входные данные

    Каждая строка входных данных содержит пять целых чисел от 1 до 6, представляющих собой пять костей, брошенных в каждом раунде. Для каждой игры 13 таких строк, и во входных данных может быть любое количество игр.

    Решение

    Решение можно разбить на две части: во-первых, нам нужно создать функции, которые производят правильную оценку для раунда в зависимости от того, какая категория применяется к нему, а во-вторых, чтобы найти, какое сопоставление категорий с раундами будет создать наивысший балл.

    Вторая часть будет решаться с использованием динамического программирования и, следовательно, требует от нас определения подзадач, которые мы будем решать, чтобы решить исходную проблему. Я выбрала подзадачу как наивысший достижимый балл, учитывая, что были присвоены категории 0….k и использовались определенные раунды.

    Для начала создадим функции подсчета баллов для определенных категорий.

    Функция подсчета всех 1, 2, 3, 4, 5, 6 в раунде, в зависимости от передаваемых значений.



    Функция категории шанс – сумма всех цифр на всех костях.



    Функция подсчета 3, 4, 5 одинаковых цифр на костях за один раунд.



    Функция категорий короткий стрит (последовательность от 1 до 4 или от 1 до 5).



    Функция категории фулл-хаус - на трех костях выпало одно и то же число и на оставшихся двух костях также выпало одно и то же число.



    Далее необходимо получить максимального значения для каждой комбинации. Для этого используем контейнер с ключом пары ; первое целое число - это количество используемых категорий, а второе - целое число, где каждый из 13 битов указывает, использовался ли конкретный раунд или нет. Значение внутри каждой записи контейнера представляет собой вектор целых чисел, указывающий присвоение категорий раундам, и это возвращается функцией в конце.







    Главная функция программы.






    Результат программы



    написать администратору сайта