Задание №6 ЕГЭ Информатика с ответом и решением
Ответ: 268
Условие
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n — целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, и Направо m (где m — целое число), вызывающая изменение направления движения на m градусов по часовой стрелке. Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз. Черепахе был дан для исполнения следующий алгоритм: Повтори 6 [Вперёд 10 Направо 60].
Определите количество точек с целочисленными координатами, лежащих внутри или на границе области, которую ограничивает заданная алгоритмом линия.
Подсказки — как подойти к решению
- Определи фигуру по командам: шесть одинаковых шагов с поворотом на 60 градусов дают замкнутый правильный многоугольник. Найди координаты его вершин и нанеси на чертёж узлы целочисленной сетки.
- Считай точки двойным перебором по целым координатам, проверяя их неравенствами сторон. В этой задаче точки на границе учитываются, а часть вершин фигуры имеет нецелые координаты — считай честно, а не по площади.
Решение
Приведём решение Юрия Красильникова на языке Python.
Черепаха рисует правильный шестиугольник со стороной 10.
Слева шестиугольник ограничен прямой x=0, справа - x=10 · sqrt(3) (приближенно 17.3), снизу - прямыми y=-x/sqrt(3) и y=x/sqrt(3)-10, а сверху - y=x/sqrt(3)+10 и y=-x/sqrt(3)+20.
Количество точек внутри шестиугольника можно найти с помощью следующей программы:
k=0
for x in range(18):
for y in range(-10,20):
if max(-x/3**0.5,x/3**0.5-10) <= y <= min(10+x/3**0.5,-x/3**0.5+20): k+=1
print(k)
Решим эту задачу, используя язык программирования Python.
c = 0
for x in range(0, 20):
for y in range(-5, 15):
if x >= 0 and x <= 10 * 3**0.5 and \
y >= -1/(3**0.5)*x and y >= 1/(3**0.5)*x-10 and \
y <= 1/(3**0.5)*x+10 and y <= -1/(3**0.5)*x+20:
c += 1
print(c)
Ответ: 268.
Приведём построение рисунка Виктории Зиберовой на языке Python.
from turtle import *
lt(90)
size=30
screensize(2000,2000)
tracer(0)
down()
for i in range(6):
fd(10*size)
rt(60)
up()
for x in range(-20,20):
for y in range(-20,20):
setpos(x*size,y*size)
dot(4,'red')
done()
Приведём программу Сергея Донец на PascalABC:
uses turtle;
begin
down;
loop 6 do
begin
Forw(10); TurnRight(60);
end;
end.
Ответ: 268
Типичные ошибки
- Ты посчитал только точки, лежащие строго внутри фигуры. В условии сказано «внутри или на границе», поэтому добавь точки на сторонах: их у этой фигуры заметно много, и ответ окажется больше.
В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №6 по информатике