ХКОИС
ХРРЦ
Регистрация
Забыли пароль?
Логин:
Пароль:
Поиск
Справочные сведения о системе образования Хабаровского края
Новости образования Хабаровского края
Информация и документы из министерства образования и науки Хабаровского края
Хабаровская краевая заочная физико-математическая школа
РЕГИОНАЛЬНАЯ ОЛИМПИАДА ШКОЛЬНИКОВ
Подготовка к олимпиадам по информатике
Подготовка к олимпиадам по информатикеЗадачи прошедших олимпиад > 2010 год. Задачи, рекомендованные для муниципального тура.
2010 год. Задачи, рекомендованные для муниципального тура.
Задача 1. «Кто посередине?» (100 баллов)
 
На федеральной автодороге «АМУР», прямой как натянутая струна, стоит большой и красивый дорожный знак с буквой «А». По магистрали движутся три автомобиля. В начальный момент каждый из них находится на некотором расстоянии от «A». Если автомобиль находится между знаком и Хабаровском, его координата имеет отрицательный знак, если между знаком и Читой – положительный. Если автомобиль движется в сторону Хабаровска, скорость имеет отрицательный знак, если в сторону Читы – положительный. Написать программу, которая будет определять, какой из трех автомобилей в данный момент времени находится между двумя другими.
Входные данные
Три пары вещественных числа, задающие начальное положение (км) и скорость (км/ч) каждого из автомобилей и одно число – время (ч), прошедшее с начала движения.
Выходные данные
Число 1, 2 или 3, соответствующее порядковому номеру автомобиля, находящегося между двумя другими, или 0 – если в данный момент времени, хотя бы два автомобиля находятся в одной точке.
Примеры входных и выходных данных
Входные данные
Выходные данные
-300 150
500 -100
400 100
10
1
-200 100
200 -100
150 -120
2
0
500 -100
-200 150
350 110
5
2
 
1100 90
300 150
-300 80
3
500 75
-200 60
1000 -90
20
2
Решение
            Пусть начальные положения автомобилей x1, x3 и x3, а скорости v1, v2 и v3, соответственно. Найдем координаты автомобилей s1, s2, s3 через время t (s1=x1+v1*t). Для автомобиля, находящегося между двумя другими, разности координаты s с двумя другими будут иметь противоположные знаки, а произведение разностей будет меньше нуля, например для первого автомобиля (s1-s2)*(s1-s3)<0, если он находится между двумя другими. Если хотя бы два автомобиля находятся в одной точке, то выполняется условие (s1-s2)*(s1-s3)*(s2-s3)=0.
            Задачу также можно решить, написав сложные логические выражения или использовать вложенные условные операторы, однако эти подходы потребуют больше времени и повышают вероятность ошибки.
 
Задача 2. «Простая карусель» (100 баллов)
 
            Последовательность целых чисел формируется следующим образом: первый элемент — заданное n-разрядное целое положительное число, второй элемент получается из первого увеличением на 1 разряда единиц, третий из второго увеличением на 1 разряда десятков и т.д., n+1 элемент получается из n-элемента увеличением на 1 n-разряда, затем процесс продолжается увеличением на 1 разряда единиц n+1-элемента и т.д. В случае превышения разрядности старший n+1 — разряд отбрасывается и прибавляется к разряду единиц. Например, дано число 78. Оно порождает последовательность целых чисел с максимальным количеством разрядов равным двум следующего вида: 78, 79, 89, 90, 1, 2, 12, 13, 23, 24, …
            Напишите программу, которая для данного целого положительного числа A, будет генерировать последовательность заданной длины K и определять, сколько элементов из этой последовательности являются простыми числами. Целое число, большее 1, называется простым, если оно не имеет других делителей кроме 1 и самого себя, например: 2, 3, 5, 7, 11. Если значение повторяется и является простым числом, то оно учитывается столько раз, сколько было повторений.
Входные данные
Целое число A – первый элемент последовательности, 0<A<10000.
Целое число K – длина генерируемой последовательности, 1<K<100.
Выходные данные
Целое число, равное количеству элементов последовательности, являющихся простыми числами.
Примеры входных и выходных данных
Входные данные
Выходные данные
78
10
5
8763
30
6
987
30
5
 
11122
36
1
 
3232
70
6
Решение
Для удобства нужно найти N — наименьшее число, равное степени 10 и большее, чем заданное A. Оно будет иметь столько нулей, сколько разрядов у числа A. Зададим начальное значение числа R, прибавляемого к значению предыдущего элемента последовательности равным 1. Дальнейшие вычисления проводятся путем прибавления числа R к предыдущему значению и вычисления нового значения R, умножением его на 10. Если R становится равным N,  то ему следует присвоить значение 1. После каждого прибавления R, следует проверять, не произошло ли переполнение (A>=N) и, при необходимости выполнять действия, описанные в условии. Проверять на простоту следует все члены последовательности, начиная с первого введенного A, если число A простое, то увеличивается значение соответствующего счетчика. Проверка на простоту может выполняться любым способом.
 
Задача 3. «Крестики-нолики» (100 баллов)
 
В крестики-нолики играют на клеточном поле размером 5 x 5. Первый ход делают крестики. Считается, что, например, крестики выиграли, если на поле найдется по горизонтали, вертикали или диагонали цепочка, состоящая подряд из 5 крестиков. Дано частично заполненное крестиками и ноликами поле.
Написать программу, проверяющую, является ли конфигурация предвыигрышной для игрока, делающего очередной ход, то есть, может ли он за один ход достичь победы.
 
Входные данные:
Пять строк, каждая из которых содержит 5 символов из числа нулей (Ø), крестиков (+) или звездочек (*), означающих пустую клетку. Гарантируется, что входные данные являются корректными.
 
Выходные данные:
Если конфигурация является предвыигрышной, слово Yes и через пробел — символ (Ø или +), указывающий, для какого игрока она предвыигрышная.
Если конфигурация не является предвыигрышной для игрока делающего следующий ход, слово No.
 
Примеры входных и выходных данных
Входные данные
Выходные данные
*****
*Ø**+
**Ø+*
**+Ø*
++**Ø
Yes Ø
****Ø
*Ø**+
**Ø+*
Ø*+**
++**Ø
No
*+*Ø*
*+*Ø*
**Ø+*
Ø+**Ø
++**Ø
Yes +
*+*Ø*
*+*Ø*
**+Ø*
Ø+***
++*Ø*
Yes Ø
 
 
Решение
Необходимо сначала определить, чей ход является очередным, учитывая, что первым ставится крестик. Затем последовательно просмотреть все горизонтали, вертикали и главные диагонали и подсчитать количество повторений знаков каждого игрока. Если в линии четыре знака игрока, делающего очередной ход, и нет противоположных, значит, ситуация предвыигрышная.
 
Задача 4. «Протокол олимпиады» (100 баллов)
 
При проведении олимпиады по информатике используется автоматизированная система тестирования программ, написанных участниками. Каждый из N участник отправляет свои программы на тестирование, каждая программа, может направляться несколько раз. Тестирующая система проверяет программу на группе тестов и формирует для участника и жюри сообщение о результатах проверки, с указанием оценки от 0 до 100 баллов. Для решения участникам предлагается 4 задачи.
Написать программу, обрабатывающую сообщения, полученные от тестирующей системы и формирующую итоговый протокол, в котором отражаются лучшие результаты по каждой из программ и сумма набранных баллов каждым из участников. Если участник не прислал ни одной программы, решающей ту или иную задачу, то он получает за нее 0 баллов. Строки протокола должны быть отсортированы по убыванию суммы набранных баллов, а при совпадении суммы баллов по возрастанию порядкового номера участника.
Входные данные:
Целое число N – количество участников олимпиады, 0<N<20.
Целое число K – количество сообщений от тестирующей системы, 0<K<1000000.
K строк, содержащих результаты проверки программы в виде трех целых чисел (номер участника, номер задачи, количество баллов) разделенных пробелами.
Выходные данные:
Таблица, содержащая сводные результаты тестирования, по итогам лучших тестов каждой из программ, отсортированная в соответствии с требованиями условия задачи. Таблица должна содержать N строк, в каждой из которых через пробел выводятся 6 чисел в следующем порядке: номер участника, количество баллов, набранное за каждую из четырех задач, суммарное количество баллов.
Примеры входных и выходных данных
Входные данные
Выходные данные
5
7
1 1 10
1 2 20
1 1 40
2 1 100
2 1 50
2 2 70
3 4 100
2 100 70 0 0 170
3 0 0 0 100 100
1 40 20 0 0 60
4 0 0 0 0 0
5 0 0 0 0 0
4
5
1 1 50
4 2 100
3 1 20
2 4 30
1 1 100
1 100 0 0 0 100
4 0 100 0 0 100
2 0 0 0 30 30
3 20 0 0 0 20
Решение
Необходимо сформировать целочисленный массив размерности Nх6 и заполнить его данными, на основе вводимых сообщений, при этом должна выполняться проверка, что новое полученное значение количества баллов больше, чем имеющееся. По окончании ввода, вычисляются итоговые суммы, а затем выполняется сортировка строк массива в соответствии с правилами, указанными в условии.
 
Copyright © 2005–2017 ХабЦНИТ ТОГУ Отправить письмо
Создание сайтов в Хабаровске
промокод wildberries . Свадебный тур в Доминикану из Киева купили за последний год сто семейных молодых пар .