Всероссийская олимпиада школьников по информатике 2014-2015 уч. год Школьный этап. 7-8 классы Методические рекомендации к решению задач Максимальное количество баллов – 260 Задача 1. «Железная дорога» (10 баллов) Друзья Миша и Оля решили прокатиться на поезде. Железная дорога, по которой ходит поезд - линейная (не имеет поворотов) и состоит из некоторого количества станций. Все станции пронумерованы подряд натуральными числами. Помогите друзьям определить на какую станцию они приедут. Если известны: номер начальной станции и количество станций, которые нужно проехать (положительное – вправо, отрицательное – влево). Если поезд приезжает в тупик (первая или последняя станция), то там и остаётся. Напишите программу, определяющую, где окажется поезд. Представьте железную дорогу в виде отрезка, который имеет начало (станция №1) и конец (последняя станция). Начало и конец отрезка – тупики. Если поезд движется вправо (вперед) по железной дороге, то количество станций, которые нужно проехать – прибавляются к начальной станции (может иметь любое значение из заданного отрезка). Если поезд движется влево (назад) по железной дороге, то количество станций, которое нужно проехать вычитаются из начальной станции. Используйте алгоритмическую структуру ветвление для записи алгоритма решения задачи. Задача 2. «Неправильный калькулятор»(30 баллов) Максим решал домашнюю задачу по математике и захотел воспользоваться калькулятором. Но, вот незадача, кнопка «Умножить» на калькуляторе сломалась. Помогите Максиму решить эту задачу. Напишите программу, которая будет вычислять произведение двух целых чисел. Операцию умножения не используйте. С клавиатуры вводятся два натуральных числа, результатом выполнения программы должно стать произведение этих чисел. Если одно из чисел равно нулю, или оба числа равны нулю, то произведение равно нулю. Если одно из чисел отрицательное, то произведение отрицательное. Если оба числа отрицательные, то произведение положительное. Операцию умножения не использовать! Для записи алгоритма решения задачи можно воспользоваться циклом с параметром. Обратите внимание на значение параметра! Параметр не может принимать отрицательное значение. Используйте функцию модуля ABS. Задача 3. «Секретный ключ» (50 баллов) Тайные агенты ЦРУ передают секретную информацию. Самое длинное слово в предложении содержит ключ к шифру. Помогите русским разведчикам узнать ключевое слово. Напишите программу, которая будет запрашивать простое повествовательное предложение (слова разделены одним пробелом) и выводить на экран слово наибольшей длины. Ваша программа должна: принять исходное предложение с клавиатуры; вывести на экран слово наибольшей длины. Примечание. Если длины слов одинаковы, выводится первое слово. С клавиатуры вводится строка. Подсчитывается количество символов до каждого пробела и запоминается. Выводится набор символов с наибольшим количеством знаков. Если все слова одинаковы по длине, то выводится первое слово. Задача 4. «Число» (70 баллов) Витя и Петя играют в игру. Витя загадывает натуральное десятичное число, а Пете сообщает его двоичный код. Петя должен угадать делится ли задуманное Витей число на 15. Помогите ребятам и напишите программу, которая будет запрашивать двоичное число (длина числа не превышает 20 двоичных разрядов) и определять, делится ли число на 15. Если вспомнить, что признаком деления на 9 в десятичной системе счисления является делимость на 9 суммы цифр числа действительно, пусть есть число S = a[n]*10n + a[n-1]*10(n-1) + ... + a[1]*10 + a[0]. S mod 9 = (a[n]*(10n-1)+a[n] + a[n-1]*(10(n-1)-1)+a[n-1] + ... + a[1]*(10-1)+a[1] + a[0]) mod 9 А так как 10k - 1 делится на 9 нацело, то и S mod 9 = (a[n] + ... +a[1] +a[0]) mod 9, и т.д.), то аналогично получаем, что признаком деления на 15 в системе счисления с базисом 16 будет делимость на 15 суммы всех шестнадцатеричных цифр числа. Мы разбиваем двоичное число справа налево на тетрады, которые однозначно можно преобразовать в шестнадцатеричные цифры, находим их сумму и делим ее на 15. Если остаток 0, то введенное число делится на 15, иначе - нет. Или Можно перевести двоичное число в десятичную СС и затем проверить кратности при помощи функции MOD. Задача 5. «Фокус - покус» (100 баллов) Катя показывает одноклассникам фокус. Просит кого-то из ребят загадать натуральное двузначное число. И тут же сообщает наименьшую сумму из всех его возможных сомножителей. Например, если загаданное число – 12, то наименьшая возможная сумма 7 (имеется в виду представление 34 или 223). Напишите программу, которая будет выполнять такой фокус. Программа должна запросить исходное число; найти и сообщить наименьшую возможную сумму натуральных сомножителей, произведение которых дает исходное число. Вариант решения задачи: program summin; uses crt; var k,n,nn,s,d:longint; begin clrscr; writeln('Исходное натуральное число '); readln(n); nn:=n; k:=0; s:=0; d:=2; while (nn>1) do begin if (nn mod d=0) then while (nn mod d=0) do begin write(d,' '); s:=s+d; k:=k+1; nn:=nn div d end; d:=d+1; end; writeln; writeln('Сумма'); if (k<2) then writeln(1+n) else writeln(s); readkey end.