Решения районной олимпиады по программированию среди школьников
Тобольск, 2006 г.
Теоретический тур
1_1.
Основанием может быть число большее 7.
3 *1 5
4 3
*
* 5 0 * 4
1_2.
1)
|
![]() |
2) Метод включений и исключений (дискретная математика):
N=25(ф)
N1=10(а)
N2=13(н)
N3=11
N12=4
N13=3
N23=4
N123=2
11-(3+4)+2=6
1_3.
физик | врач | юрист | имя | туризм | бег | |
- | - | Å | Влад | - | - | Å |
- | Å | - | Тимур | Å | - | - |
Å | - | - | Юра | - | Å | - |
Практический тур
2_1.
Рекомендации:
Организовать две функции:
function X (var i real) : real;
begin
x : = (3 * i) / 2;
end;
function z (var i, j : real) : real;
begin
z : = i – j / 3
end;
при этом тело программы может быть:
begin
x 2 : = x (8);
x 1 : = x (x 2);
x 0 : = x (x 1);
b : = z (0, x 0);
z 1 : = z (b, x 2);
z 2 : = z (b, x 1);
end.
Ответы: всего хозяйка сварила 27 шт., средний должен взять – 3 шт., младший – 5 шт.
2_2.
Рекомендации:
Суть: Бегущий отрезок на экране может получиться, если использовать оператор рисования точки сначала ярким цветом, а затем после задержки (пустой цикл) рисованием цвета фона
2_3.
Алгоритм решения задачи:
1. Найти наименьший элемент в каждой строке.
2. Найти наибольший элемент в каждом столбце.
3. Найти седловые точки, т. е. проверить равенство наименьшего элемента в строке и наибольшего элемента в столбце.
Вычеркнуть седловые точки из исходного массива и распечатать полученный массив.
2_4.
При попытке получить число 2 11213 компьютер выдаёт ошибку. Она может быть решена через организацию массива, который содержит не более 11213 данных.
При этом
А (0) – единицы искомого числа
А (1) – десятки
А (2) – сотни и т. д.
Получение данных цифр осуществляется по общеизвестному правилу умножения целых чисел.
А (0) = 2
FOR k = 2 TO 11213
P = 0
FOR i = 0 TO 11212
A = A (i) * 2 + P
A (i) = A mod 10
P = (A – A(i)) / 10
NEXT i
NEXT k
A (0) = A (0) – 1
i = 11213
DO
i = i - 1
LOOP UNTIL A(i) < > 0
FOR k = 1 TO 0 STEP – 1
PRINT A (k)
NEXT k
L = 0
i = 0
WHILE I < 11212 and L = 0
IF A(i) = 9 and A (i + 1) = 9
THEN L = 1
END IF
i = i + 1
WHEND
IF L =1 THEN PRINT “имеется” ELSE PRINT “нет”
END IF
2_5.
Рекомендации:
Организовать двумерный массив размером: по горизонтали 9 (длина слова кроссворд), по вертикали 7. Внешний цикл программы: размещение слова «кроссворд» по горизонтали массива внутренний цикл, размещение остальных слов «АЛГОЛ», и «АВОСТ» по вертикали и слова «СЛОВО» по горизонтали.
2_6.
Решение данной задачи основывается на рекурсии:
для получения данного изображения необходимо задать начальное значение стороны внешнего квадрата, тогда длина стороны квадрата является диаметром вписанной в него окружности - d, построить окружность радиуса d/2; сторона следящего квадрата - d/2 и т. д.
2_7.
Решение данной задачи разбивается на две части: 1) год является високосным и 2) год не является високосным.
А).
- вычислить количество недель, для определения длины цикла;
- задать массив, в котором количество строк совпадает с величиной round(Е/(В/А)), количество столбцов – А;
- заполнить массив числами от 1 до В;
- каждый элемент массива сравнить с номерами праздничных дней, т. е. D1, D2, …, Dм, если элемент массива совпадает с Di, то S:=S+0, иначе S:=S+1;
- вычислить количество оставшихся рабочих дней, приходящихся на каждый день недели, сохранить значения в новом массиве (например, Р), где строки – года, столбцы – дни недели;
Б).
- найти разницу между соседними високосными годами, т. е. вычислить сколько раз между ними уложится полный цикл, в котором количество рабочих дней вычисляется по действиям части А).
- если год является високосным, то в первой части решения необходимо изменить формулу вычисления длины цикла на round(Е/(В+1/А)) и аналогично сравнить элементы массива с праздничными днями, сохраняя результат во второй строке массива Р;
- найти сумму элементов в столбцах массива Р и среди полученных значений определить максимальный, порядковый номер этого столбца и определит номер дня недели, который необходимо выбрать выходным днем.



