Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
информатика задания + решения.doc
Скачиваний:
34
Добавлен:
11.02.2015
Размер:
1.36 Mб
Скачать

Решение:

Рассматривается алгоритм на языке Паскаль. 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 не кратно трем, то оно может быть получено только из предыдущего числа (– 1) с помощью команды «прибавь 1», и, следовательно, количество программ, с помощью которых можно получить это число n из единицы, такое же, как и для предыдущего числа (– 1). , где R(j) – количество программ, с помощью которых число j можно получить из единицы. Если же текущее число n кратно трем, то оно, во-первых, может быть получено из предыдущего числа / 3 с помощью команды «умножь на 3» и, во-вторых, может быть получено из предыдущего числа (– 1) с помощью команды «прибавь 1». Поэтому количество программ, с помощью которых можно получить это число n из единицы, будет равно сумме количества программ, с помощью которых можно получить из единицы число / 3, и количества программ, с помощью которых можно получить из единицы число (– 1). , где R(j) – количество программ, с помощью которых число j можно получить из единицы. Итак, мы вывели следующие соотношения:   R(j) – количество программ, с помощью которых число j можно получить из единицы; = 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 Выполните задание и сравните с предлагаемым решением.