Задания
Версия для печати и копирования в MS Word
Тип 6 № 55593
i

Ис­пол­ни­тель Че­ре­па­ха пе­ре­дви­га­ет­ся по плос­ко­сти и остав­ля­ет след в виде линии. Че­ре­па­ха может вы­пол­нять три ко­ман­ды: Вперёд n (n  — число), На­пра­во m (m  — число) и На­ле­во m (m  — число). По ко­ман­де Вперёд n Че­ре­па­ха пе­ре­ме­ща­ет­ся вперёд на n еди­ниц. По ко­ман­де На­пра­во m Че­ре­па­ха по­во­ра­чи­ва­ет­ся на месте на m гра­ду­сов по ча­со­вой стрел­ке, при этом со­от­вет­ствен­но ме­ня­ет­ся на­прав­ле­ние даль­ней­ше­го дви­же­ния. По ко­ман­де На­ле­во m Че­ре­па­ха по­во­ра­чи­ва­ет­ся на месте на m гра­ду­сов про­тив ча­со­вой стрел­ки, при этом со­от­вет­ствен­но ме­ня­ет­ся на­прав­ле­ние даль­ней­ше­го дви­же­ния.

В на­чаль­ный мо­мент Че­ре­па­ха на­хо­дит­ся в на­ча­ле ко­ор­ди­нат и на­прав­ле­на вверх (вдоль по­ло­жи­тель­но­го на­прав­ле­ния оси ор­ди­нат).

За­пись По­вто­ри k [Ко­ман­да1 Ко­ман­да2Ко­ман­даS] озна­ча­ет, что за­дан­ная по­сле­до­ва­тель­ность из S ко­манд по­вто­рит­ся k раз.

Че­ре­па­ха вы­пол­ни­ла сле­ду­ю­щую про­грам­му (x в тек­сте про­грам­мы  — не­ко­то­рое на­ту­раль­ное число):

По­вто­ри 4 [Вперёд x На­пра­во 90 Вперёд x На­ле­во 90 Вперёд x На­пра­во 90].

Опре­де­ли­те, при каком наи­мень­шем на­ту­раль­ном x ко­ли­че­ство точек с це­ло­чис­лен­ны­ми ко­ор­ди­на­та­ми внут­ри об­ла­сти, огра­ни­чен­ной ли­ни­ей, по­лу­чен­ной при вы­пол­не­нии дан­ной про­грам­мы, ока­жет­ся боль­ше 1000. Точки, рас­по­ло­жен­ные на линии, не учи­ты­вать.

Спрятать решение

Ре­ше­ние.

На­ри­су­ем при по­мо­щи 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 ис­ко­мых точек 9, а всего точек 49. Для x  =  3 ис­ко­мых точек 28, а всего 100. Можно вы­ве­сти фор­му­лу. Ко­ли­че­ство ис­ко­мых точек будет равно раз­но­сти ко­ли­че­ства всех точек и точек на линии, то есть:

 левая круг­лая скоб­ка 3x плюс 1 пра­вая круг­лая скоб­ка в квад­ра­те минус 4 умно­жить на левая круг­лая скоб­ка x плюс 1 пра­вая круг­лая скоб­ка в квад­ра­те минус 4 левая круг­лая скоб­ка x минус 1 пра­вая круг­лая скоб­ка .

При по­мо­щи python най­дем ми­ни­маль­ное зна­че­ние, при ко­то­ром вы­ве­ден­ная фор­му­ла даёт число, пре­вос­хо­дя­щее 1000:

for x in range(1, 100):

if (3 * x + 1) ** 2 - ((x + 1) ** 2) * 4 - 4 * (x - 1) >= 1000:

print(x)

break

Про­грам­ма долж­на вы­ве­сти число 15.

 

Ответ: 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.


Аналоги к заданию № 55593: 55623 Все