Задания
Версия для печати и копирования в MS Word
Тип Д18 C3 № 1071
i

Вы­бе­ри­те ОДНО из пред­ло­жен­ных ниже за­да­ний: 15.1 или 15.2.

 

15.1 Ис­пол­ни­тель Робот умеет пе­ре­ме­щать­ся по ла­би­рин­ту, на­чер­чен­но­му на плос­ко­сти, раз­би­той на клет­ки. Между со­сед­ни­ми (по сто­ро­нам) клет­ка­ми может сто­ять стена, через ко­то­рую Робот прой­ти не может.

У Ро­бо­та есть де­вять ко­манд. Че­ты­ре ко­ман­ды  — это ко­ман­ды-при­ка­зы:

вверх вниз влево впра­во

При вы­пол­не­нии любой из этих ко­манд Робот пе­ре­ме­ща­ет­ся на одну клет­ку со­от­вет­ствен­но: вверх ↑ вниз ↓, влево ← , впра­во →. Если Робот по­лу­чит ко­ман­ду пе­ре­дви­же­ния сквозь стену, то он раз­ру­шит­ся.

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

Еще че­ты­ре ко­ман­ды  —  это ко­ман­ды про­вер­ки усло­вий. Эти ко­ман­ды про­ве­ря­ют, сво­бо­ден ли путь для Ро­бо­та в каж­дом из че­ты­рех воз­мож­ных на­прав­ле­ний:

свер­ху сво­бод­но  снизу сво­бод­но  слева сво­бод­но  спра­ва сво­бод­но

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

 

если усло­вие то

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

все

 

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

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

впра­во

за­кра­сить

все

 

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

 

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

впра­во

все

 

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

 

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

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

кц

 

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

 

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

впра­во

кц

 

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

 

На бес­ко­неч­ном поле име­ет­ся го­ри­зон­таль­ная стена. Длина стены не­из­вест­на. Робот на­хо­дит­ся свер­ху от стены в левом ее конце. На ри­сун­ке при­ве­де­но рас­по­ло­же­ние Ро­бо­та от­но­си­тель­но стены (Робот обо­зна­чен бук­вой «Р»).

 

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

 

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

 

Ал­го­ритм может быть вы­пол­нен в среде фор­маль­но­го ис­пол­ни­те­ля или за­пи­сан в тек­сто­вом ре­дак­то­ре.

 

15.2 На­пи­ши­те про­грам­му для ре­ше­ния сле­ду­ю­щей за­да­чи. Де­вя­ти­класс­ни­ки участ­во­ва­ли в вик­то­ри­не по ма­те­ма­ти­ке. Не­об­хо­ди­мо было от­ве­тить на 20 во­про­сов. По­бе­ди­те­лем вик­то­ри­ны счи­та­ет­ся участ­ник, пра­виль­но от­ве­тив­ший на наи­боль­шее ко­ли­че­ство во­про­сов. На сколь­ко во­про­сов по­бе­ди­тель от­ве­тил пра­виль­но? Если есть участ­ни­ки вик­то­ри­ны, ко­то­рые не смог­ли дать пра­виль­ный ответ ни на один из во­про­сов, вы­ве­ди­те YES, иначе вы­ве­ди­те NO. Га­ран­ти­ру­ет­ся, что есть участ­ни­ки, пра­виль­но от­ве­тив­шие хотя бы на один из во­про­сов. Про­грам­ма по­лу­ча­ет на вход число участ­ни­ков вик­то­ри­ны N (1 ≤ N ≤ 50), затем для каж­до­го участ­ни­ка вво­дит­ся ко­ли­че­ство во­про­сов, на ко­то­рые по­лу­чен пра­виль­ный ответ.

 

При­мер ра­бо­ты про­грам­мы:

 

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

4

15

12

0

17

17

YES

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

Ре­ше­ние.

15.1 Ко­ман­ды ис­пол­ни­те­ля будем за­пи­сы­вать жир­ным шриф­том, а ком­мен­та­рии, по­яс­ня­ю­щие ал­го­ритм и не яв­ля­ю­щи­е­ся его ча­стью,  —кур­си­вом. На­ча­ло ком­мен­та­рия будем обо­зна­чать сим­во­лом «|».

| Будем дви­гать­ся впра­во вдоль стены, на каж­дом шаге за­кра­ши­вая клет­ку свер­ху и пе­ре­дви­га­ясь впра­во.

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

вверх

за­кра­сить

вниз

впра­во

кц

 

Воз­мож­ны и дру­гие ва­ри­ан­ты ре­ше­ния. До­пус­ка­ет­ся ис­поль­зо­ва­ние иного син­так­си­са ин­струк­ций ис­пол­ни­те­ля,

более при­выч­но­го для уча­щих­ся. До­пус­ка­ет­ся на­ли­чие от­дель­ных син­так­си­че­ских оши­бок, не ис­ка­жа­ю­щих за­мыс­ла ав­то­ра ре­ше­ния.

 

15.2 Ре­ше­ни­ем яв­ля­ет­ся про­грам­ма, за­пи­сан­ная на любом языке про­грам­ми­ро­ва­ния. При­мер вер­но­го ре­ше­ния, за­пи­сан­но­го на языке Пас­каль:

var a, N, i, max, num: integer;

begin

max:=0;

num:=0;

readln(N);

for i:=1 to N do begin

readln(a);

if a > max then

max := a;

if a = 0 then

num := 1;

end;

writeln(max);

if num > 0 then

writeln(’YES’)

else writeln(’NO’);

end.

 

При­ве­дем дру­гое ре­ше­ние на языке Python.

maxi = 0

num = 0

n = int(input())

for i in range(n):

a = int(input())

if a > maxi: maxi = a

if a == 0: num = 1

print(maxi)

if num > 0:

print('YES')

else:

print('NO')

 

Воз­мож­ны и дру­гие ва­ри­ан­ты ре­ше­ния. Для про­вер­ки пра­виль­но­сти ра­бо­ты про­грам­мы не­об­хо­ди­мо ис­поль­зо­вать сле­ду­ю­щие тесты:

 

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

1

15

15

NO

2

2

17

10

17

NO

3

3

0

12

18

18

YES

4

3

0

16

0

16

YES

Спрятать критерии
Критерии проверки:

Кри­те­рии оце­ни­ва­ния вы­пол­не­ния за­да­ния 15.1Баллы
За­пи­сан пра­виль­ный ал­го­ритм, не при­во­дя­щий к уни­что­же­нию

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

2
При всех до­пу­сти­мых ис­ход­ных дан­ных верно сле­ду­ю­щее:

1) вы­пол­не­ние ал­го­рит­ма за­вер­ша­ет­ся, и при этом Робот не раз­би­ва­ет­ся;

2) за­кра­ше­но не более 10 лиш­них кле­ток;

3) оста­лись не­за­кра­шен­ны­ми не более 10 кле­ток из числа тех, ко­то­рые долж­ны были быть за­кра­ше­ны.

1
За­да­ние вы­пол­не­но не­вер­но, т. е. не вы­пол­не­ны усло­вия,

поз­во­ля­ю­щие по­ста­вить 1 или 2 балла.

0
Мак­си­маль­ный балл2

 

Кри­те­рии оце­ни­ва­ния вы­пол­не­ния за­да­ния 15.2Баллы
Пред­ло­же­но вер­ное ре­ше­ние. Про­грам­ма пра­виль­но ра­бо­та­ет на

всех при­ведённых выше те­стах. До­пус­ка­ет­ся вывод от­ве­тов на во­про­сы в одной стро­ке. Про­грам­ма может быть за­пи­са­на на любом языке про­грам­ми­ро­ва­ния.

2
Про­грам­ма выдаёт не­вер­ный ответ на одном или двух те­стах, при­ведённых выше. На­при­мер, если в ре­ше­нии не­кор­рект­но опре­де­ля­ет­ся на­ли­чие дней, когда тем­пе­ра­ту­ра опус­ка­лась ниже –15 гра­ду­сов, про­грам­ма вы­даст не­вер­ный ответ на тесте №3:

18

YES

и тесте № 4:

16

YES

YES

ИЛИ

Про­грам­ма выдаёт не­вер­ный ответ на всех те­стах: на каж­дом тесте толь­ко на один из двух во­про­сов по­лу­чен пра­виль­ный ответ.

ИЛИ

Про­грам­ма выдаёт не­вер­ный ответ на всех те­стах: пра­виль­ные от­ве­ты на во­про­сы вы­во­дят­ся в об­рат­ном по­ряд­ке – сна­ча­ла на вто­рой во­прос, затем на пер­вый.

1
Про­грам­ма выдаёт на те­стах не­вер­ные от­ве­ты, от­лич­ные от опи­сан­ных в кри­те­рии на 1 балла.0
Мак­си­маль­ный балл2
Раздел кодификатора ФИПИ: