
Решение:
Рассматривается
алгоритм на языке Паскаль.
1) В задании
требуется найти минимальный элемент
массива, который имеет четное значение
и не делится на 3.
Как известно, делимость
одного целого числа на другое в языке
Паскаль проверяется с помощью операции mod
(выделение
остатка
целочисленного деления). Тогда условие
«элемент массива имеет четное значение
и не делится на три» запишется так:
.
2)
Стандартный цикл поиска минимального
элемента, удовлетворяющего условию,
выглядит так:
Каким
должно быть начальное значение переменной
min?
Его
нужно выбрать таким, чтобы для первого
же «подходящего» элемента выполнилось
условие a[i] < min,
и это «временное» начальное значение
было бы заменено на реальное. Так как
по условию задания диапазон входных
чисел ограничен (от 0 до 1000), то можно
выбрать любое значение, большее 1000,
например, 1001.
3) Фрагмент программы
на Паскале, который должен находиться
на месте многоточия, с комментариями:
4)
Фрагменты программы на других языках
программирования (от разработчика
задания (ФИПИ)).
Задание C3. |
У исполнителя Утроитель две команды, которым присвоены номера: 1. прибавь 1, 2. умножь на 3. Первая из них увеличивает число на экране на 1, вторая – утраивает его. Программа для Утроителя – это последовательность команд. Сколько есть программ, которые число 1 преобразуют в число 29? Ответ обоснуйте. Выполните задание и сравните с предлагаемым решением. |
Решение:
Рассмотрим целые
числа от 1 до 29.
Для каждого из
чисел определим количество программ
Утроителя, с помощью которых это число
можно получить из единицы, используя
заданные в условии задачи команды
«прибавь 1» и «умножь на 3».
Количество
программ, которые преобразуют число 1
в число n
будем обозначать R(n).
Для
единицы получаем R(1) = 1,
так как число 1 можно получить из
единицы с помощью «пустой» программы
(обратите внимание, что эту ситуацию
также следует учесть в ходе анализа
задачи!).
Для числа 2 получаем R(2) = 1,
так как число 2 можно получить из
числа 1 только с помощью команды
«прибавь 1». Причем R(2) = R(1) = 1.
Для
числа 3 получаем R(3) = 2,
так как число 3 можно получить из
числа 1 или с использованием команды
«умножь на 3» или с использованием
команды «прибавь 1».
Попробуем
обобщить закономерности.
Очевидно,
что если
текущее число n
не кратно
трем, то оно
может быть получено только из предыдущего
числа (n – 1)
с помощью команды «прибавь 1», и,
следовательно, количество программ, с
помощью которых можно получить это
число n
из единицы, такое же, как и для предыдущего
числа (n – 1).
,
где R(j) –
количество программ, с помощью которых
число j
можно получить из единицы.
Если
же
текущее
число n
кратно трем,
то оно, во-первых, может быть получено
из предыдущего числа n / 3
с помощью команды «умножь на 3» и,
во-вторых, может быть получено из
предыдущего числа (n – 1)
с помощью команды «прибавь 1». Поэтому
количество программ, с помощью которых
можно получить это число n
из единицы, будет равно сумме количества
программ, с помощью которых можно
получить из единицы число n / 3,
и количества программ, с помощью которых
можно получить из единицы число (n – 1).
,
где R(j) –
количество программ, с помощью которых
число j
можно получить из единицы.
Итак, мы
вывели следующие соотношения:
R(j) –
количество программ, с помощью которых
число j
можно получить из единицы; n = 3, 4, 5,..., 29;
R(1) = R(2) = 1.
Чтобы
найти количество программ, с помощью
которых из единицы можно получить 29,
воспользуемся полученными формулами
и заполним нижеследующую таблицу для
целых n
от 1 до 29 включительно.
Как
видим из таблицы, искомое количество
программ равно 23.
Ответ:
23.
Задание C4. |
На вход программе подается последовательность символов, заканчивающаяся символом «#». Другие символы «#» во входной последовательности отсутствуют. Программа должна вывести на экран латинскую букву, встречающуюся во входной последовательности наибольшее количество раз, и (во второй строке) количество этих случаев. Если таких букв во входной последовательности окажется несколько, программа должна вывести на экран все их, через пробел, в алфавитном порядке. Строчные и прописные буквы не различаются. Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например Borland Pascal 7.0), которая должна решать поставленную задачу. Пример входных данных: Day, mice. "Year" – a mistake# Пример выходных данных: А 4 Другой вариант: Пример входных данных: ABCD АВСЕ ABCF# Пример выходных данных: А В С 3 Выполните задание и сравните с предлагаемым решением. |