Нц пока не снизу свободно




Олимпиадные задания по информатике 7 - 8 класс

Школьный уровень

1. (1 балл) На рисунках А и Б чашечные весы находятся в равновесии. Как вы думаете, сколько кубических гирек (на рисунке изображены в виде квадрата) надо использовать, чтобы уравновесить весы В?

2. (2 балла) В классе 35 учеников, каждый из которых любит футбол, волейбол или баскетбол, а некоторые – два или даже три из этих видов спорта. 24 ученика любят футбол, 18 – волейбол, 12 – баскетбол. При этом 10 учеников одновременно любят футбол и волейбол, 8 – футбол и баскетбол, а 5 волейбол и баскетбол. Сколько учеников этого класса любят все 3 вида спорта?

3. (2 балла) Исполнитель РОБОТ

Исполнитель «робот» умеет перемещаться по лабиринту, начерченному на плоскости, разбитой на клетки. Ниже приведено описание РОБОТА.

У РОБОТА есть четыре команды перемещения:

Вверх

Вниз

Влево

Вправо

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →.

Между соседними (по сторонам) клетками может стоять стена, через которую РОБОТ пройти не может. Если РОБОТ получает команду передвижения через стену, то он разрушается.

Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

Сверху свободно

Снизу свободно

Слева свободно

Справа свободно

Эти команды можно использовать вместе с условием «если », имеющего следующий вид:

если <условие> то

Последовательность команд

Все

«Последовательность команд» — это одна или несколько любых команд робота. Например, для передвижения на одну клетку вправо, если справа нет стенки, можно использовать такой алгоритм:

Если справа свободно то

Вправо

Все

В одном условии можно использовать несколько команд, используя логические связки и, или, не, например,

Если (справа свободно) и (не снизу свободно) то

Вправо

Все

Для повторения последовательности команд можно использовать цикл «пока », имеющий следующий вид:

нц пока < условие >

Последовательность команд

кц

Например, для движения вправо, пока это возможно, можно использовать следующий алгоритм:

Нц пока справа свободно

Вправо

кц

Также у робота есть команда закрасить, которая закрашивает клетку, в которой робот находится в настоящий момент.

Выполните задание

На бесконечном поле имеется длинная лестница, которая сначала поднимается вверх слева направо, а затем спускается вниз справа налево. Количество ступеней ведущих от верхней ступени вниз неизвестно, ни для направления влево, ни для направления вправо. Робот находится в клетке, расположенной над верхней ступенью. Начальное положение робота также неизвестно. Одно из возможных положений робота приведено на рисунке (робот обозначен буквой «Р», рис.1):

рисунок 1 рисунок 2

Напишите для робота алгоритм, закрашивающий все клетки, расположенные непосредственно справа от ступеней лестницы, спускающейся слева направо. Робот должен закрасить только клетки, удовлетворяющие данному условию. Например, для приведенного выше рисунка робот должен закрасить следующие клетки (см. рисунок 2):

Конечное расположение робота может быть произвольным. Алгоритм должен решать задачу для произвольного размера стены и любого допустимого начального расположения робота.

 

4. (4 балла) Сумма факториалов

Факториалом натурального числа К называется произведение . Требуется написать программу, которая по заданному числу N вычислит сумму

Входные данные

Входной файл input.txt содержит одно натуральное число N (

Выходные данные

Выходной файл output.txt должен содержать все десятичные знаки искомой суммы

Например:

Input.txt Otput.txt
     
     
     

 

5. (4 балла) Оптовая покупка

Пара носков стоит 10руб 50коп., связка (12 пар) – 102руб 50копеек, а коробка – (12 связок) стоит 1140руб.

Требуется написать программу, которая по числу пар носков, которые хочет купить покупатель, вычисляет количества коробок, связок и пар носков, которые ему следует купить с наибольшей выгодой.

Входные данные

Входной файл input.txt содержит натуральное число N ( - число пар носков, которые желает купить покупатель

Выходные данные

Выходной файл output.txt должен содержать три числа (первое – количество коробок, второе – связок, третье – пар носков), разделённые пробелами

Примеры

Input.txt Otput.txt
    0 1 0
    3 5 8

 

 


 

Комментарии к проверке, ответы

1. 10 кубов (кубических гирек). Решение: необходимо умножить весы А на 3, получится 12 кубов + 3 шара = 15 звезд. На весах Б известен вес 3 шаров = 3 звезды и 6 кубам, перенесем их вместо 3 шаров на весах А. Получим: 18 кубов = 12 звездам или 3 куба = 2 звездам. Далее весы Б умножим на 2. Получим: 6 шаров = 6 звезд + 12 кубов. Заменим 6 звезд эквиваленту в кубах, получится: 6 шаров = 21 куб или 2 шара = 7 кубам. Таким образом, 2 шара + 2 звезды = 7 кубов + 3 куба = 10 кубов (кубических гирек).

 

2. Решаем с помощью кругов Эйлера

Пусть круг А, состоящий из частей I, IV, V, VII, изображает учеников, любящих футбол. Круг Б (II, V, VI, VII) - учеников любящих волейбол, круг В - баскетбол

Всего в классе 35 учеников, а так как в А – 24 ученика, в Б -18, в их общей части = (V + VII)=10 учеников, то в части III (только баскетбол), 3 человека: 35 – (24+18-10)

Рассуждая аналогично, находим, что в части 1 будет 10 учеников, а в части II – 7учеников. Значит 15 человек увлекаются не менее чем двумя видами спорта. Надо выяснить, сколько школьников в группе VII:

(V+VII)+(IV+VII)+(VI+VII)=10+8+5=23

IV+V+VI+VII=15

VII+VII=23-15= 8 VII=4

Ответ: 4 человека любят все три вида спорта

 

3. Далее предложен один из вариантов решения:

{Двигаемся вниз пока не дойдем до верхней ступени}

Нц пока снизу свободно

Вниз

Кц

{Двигаемся по лестнице слева направо и сверху вниз, закрашивая клетки справа от ступеней}

Нц пока не снизу свободно

Вправо

Вниз

Закрасить

Вниз

Закрасить

Кц

Проверка:

3.1. 2 балла Записан правильный алгоритм, не приводящий к разрушению Робота, полностью решающий поставленную задачу

3.2. 1 балл Алгоритм в целом записан верно, но может содержать одну легко устранимую ошибку. Примеры ошибок:

- Робот проходит через проход, останавливается у правой стены, но не спускается в нижний угол

- Вместо нижнего угла Робот перемещается в правый верхний угол

- Алгоритм записан верно для другого расположения Робота, например, Робот перемещается из левого нижнего в правый верхний угол.

- Робот разрушается в результате столкновения со стеной, например, вследствие неверного определения конца стены.

3.3. 0 баллов Задание выполнено неверно или ошибок более одной

 

4. Проверка:

4.1. Задача обязательно должна быть написана на одном из языков программирования на компьютере. Если это не выполняется – 0 баллов

4.2. Ввод данных должен осуществляться через работу с текстовым файлом. Если ввод с клавиатуры, то минус 1 балл.

4.3. Проверяем работу по 2 тестам

Input.txt Otput.txt
     
     

 

Разбор: Так как факториал быстро растущая целочисленная функция, то для получения суммы факториалов необходимо использовать длинную арифметику. Если вычислять сумму по формуле слева направо, то потребуется реализовать две операции длинной арифметики: сложение многозначных чисел и умножение многозначного числа на короткое. Для упрощения набора используемых операций преобразуем формулу: А это позволяет использовать вместо сложения более простую программируемую операцию добавления единицы

Программа:

Var n, p, i, k, m: integer;

a: array [1..1000] of integer;

BEGIN

Assign (input, ‘input.txt’); reset (input);

Assign (output, ‘output.txt), rewrite (output);

Read (n);

k:=1; a[k]:=1;

for i:=n downto 2 do begin

p:=0;

for m:=1 to k do begin

p:=p+a[m]*i; a[m]:=p mod 10; p:=p div 10 end;

while p>0 do begin

k:=k+1;

a[k]:=p mod 10;

p:=p div 10 end;

m:=1;

while a[m]=9 do begin a[m]:=0; m:=m+1 end;

a[m]:=a[m]+1; if m>k then k:=m;

end;

for i:=k downto 1 do write (a[i]);

End.

 

5. Проверка:

5.1. Задача обязательно должна быть написана на одном из языков программирования на компьютере. Если это не выполняется – 0 баллов

5.2. Ввод данных должен осуществляться через работу с текстовым файлом. Если ввод с клавиатуры, то минус 1 балл.

5.3. Проверяем работу по 4 тестам

Input.txt Otput.txt
    0 1 3
    1 0 5
    3 2 0
    694444 5 4

Разбор

Обозначим через n1, n2, n3 количество коробок, связок и пар носков, которые следует купить. Оптимальная покупка без излишков находится очевидным образом. Это записано в первых четырёх операторах после ввода в нижеприведённой программе. Удешевить покупку можно лишь двумя способами – либо взять лишнюю связку и не брать пар, либо взять лишнюю коробку и не брать ни связок, ни пар

Программа

Var n, m, n1, n2, n3: longist;

BEGIN

Assign (input, ‘input.txt’); reset (input);

Assign (output, ‘output.txt), rewrite (output);

n1:=n div 144;

m:=n mod 144;

n2:= m div 12;

n3:= m mod 12;

if n3*105>1025 then

begin n2:=n2+1; n3:=0 end;

if n2*1025+n3*105>11400 then

begin n1:=n1+1; n2:=0; n3:=0 end;

write (n1,’ ‘,n2,’ ‘,n3);

END.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-11-09 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: