Исполнитель Черепаха передвигается по плоскости и оставляет след в виде линии. Черепаха может выполнять три команды:
В начальный момент Черепаха находится в начале координат и направлена вверх (вдоль положительного направления оси ординат).
Запись
Черепаха выполнила следующую программу (x в тексте программы — некоторое натуральное число):
Повтори 4 [Вперёд x Направо 90 Вперёд x Налево 90 Вперёд x Направо 90].
Определите, при каком наименьшем натуральном x количество точек с целочисленными координатами внутри области, ограниченной линией, полученной при выполнении данной программы, окажется
Нарисуем при помощи Python искомую картинку для некоторых значений x и попробуем вывести формулу для нахождения искомого количества точек:
import turtle as t
t.left(90)
t.speed(1000)
k = 10
x = 2
t.down()
for i in range(4):
t.forward(x * k)
t.right(90)
t.forward(x * k)
t.left(90)
t.forward(x * k)
t.right(90)
t.up()
for i in range(0, 3 * x + 1):
for y in range(-x, 2 * x + 1):
t.goto(i * k, y * k)
t.dot()
Для x = 2 искомых
При помощи python найдем минимальное значение, при котором выведенная формула даёт число,
for x in range(1, 100):
if (3 * x + 1) ** 2 - ((x + 1) ** 2) * 4 - 4 * (x - 1) >= 1000:
print(x)
break
Программа должна вывести
Ответ: 15.
Приведём аналитическое решение Юрия Красильникова.
Черепаха по заданной программе нарисует крест из пяти квадратов со стороной x.
Число точек внутри этого креста можно подсчитать по формуле 5(x-1)2+4(x-1) или 5x2-6x+1. (Чтобы убедиться в справедливости этой формулы, достаточно нарисовать крест для x=3 и точки внутри него.)
Задача сводится к решению квадратного неравенства 5x2-6x+1 > 1000 или 5x2-6x-999 > 0.
Корни трехчлена 5x2-6x-999 найдем с помощью программы
a,b,c = 5,-6,-999
d = b**2-4*a*c
x1 = (-b-d**0.5)/(2*a)
x2 = (-b+d**0.5)/(2*a)
print(x1,x2)
Корни равны (округленно) -13.55 и 14.75.
Минимальное натуральное число, удовлетворяющее приведенному выше неравенству - это 15.
Приведём решение Сергея Донец на языке PascalABC.NET.
4x(x-1) + (x-1) · (x-1)
выносим (x-1) за скобку получаем (x-1) · (5x-1)
x=2 (2-1) · (5 · 2-1)=9
x=3 (3-1) · (5 · 3-1)=28
x=14 (14-1) · (5 · 14-1)=897
x=15 (15-1) · (5 · 15-1)=1036
uses turtle;
begin
{расчёт по формуле. когда d больше 1000 вывести х}
for var x:=1 to 1000 do
begin
var d:= (x-1)*(5*x-1);
if d>1000
then begin
Print(x);//15
down;
{крест толщина и высота палки от центра до края = х}
loop 4 do
begin
Forw(x); TurnRight(90);
Forw(x); TurnLeft(90);
Forw(x); TurnRight(90);
end;
exit;
end;
end;
end.

