Текст
                    В. М. Котов И. А. Волков А. И. Лапо

Методы
алгоритмизации
У ч е б н о е п о с о б и е д л я 8—9 к л а с с о в
общеобразовательной школы
с углубленным изучением информатики
с русским языком обучения

Допущено
Министерством
Республики

образования
Беларусь

МИНСК «НАРОДНАЯ АСВЕТА» 2000


УДК ББК [002.6­f681.3](075.3=82) 32.81я721.6 К95 Рецензенты: канд. пед. наук, доцент кафедры прикладной математики и информати­ ки БГПУ им. М. Танка П упцев А. £.; учитель информатики высшей категории СШ № 2 г. Минска Савченкова Н. И. © Коллектив авторов, 2000 © Клюйко Б. Г., оформление, 2000 ISBN 985­Г2­0259­2 © УП «Народная асвета», 2000
ОТ АВТОРОВ З а ч а с т у ю р е ш е н и е з а д а ч и по и н ф о р м а т и к е п р о т е к а е т с л е д у ю щ и м о б р а з о м : в ы с м о т р и т е на п о с т а н о в к у з а д а ч и и, и с п о л ь з у я п р и о б р е т е н н ы е н а в ы к и и и з в е с т н ы е в а м м е т о д ы , в ы д а е т е р е ш е н и е . П р и этом о б ы ч н о н е я в н о с ч и т а е т с я , что « п е р в ы й в з г л я д — н а и б о л е е в е р н ы й » , и е с л и р е ш е н и е п о л у ч е н о , то на э т о м « а к т т в о р е н и я » п р о г р а м м ы з а в е р ш е н . Н о н а с к о л ь к о это « т в о р е н и е » я в ­ ляется законченным и эффективным? Обычно при анали­ з е т а к о г о р е ш е н и я о к а з ы в а е т с я , что п е р в ы й в з г л я д м о ­ ж е т в с е г о не у в и д е т ь , и что е с л и п о с л е него е щ е ч у т ь ч у т ь п о д у м а т ь , то р е з у л ь т а т п о л у ч а е т с я н а м н о г о л у ч ш е (что в е р н о не т о л ь к о в и н ф о р м а т и к е ) . У ч е б н о е п о с о б и е п р е д н а з н а ч е н о д л я того, ч т о б ы по­ мочь в а м в ы б р а т ь э ф ф е к т и в н о е р е ш е н и е д л я п о с т а в л е н ­ ной з а д а ч и и р а с с к а з а т ь о с т а н д а р т н ы х п о д х о д а х к р е ш е ­ нию з а д а ч по и н ф о р м а т и к е . Н е к о т о р ы е из р а с с м а т р и в а е м ы х в п о с о б и и з а д а ч в а м у ж е встречались в курсе математики. Иногда для этих з а д а ч п р е д л а г а ю т с я о т л и ч н ы е от у ж е и з в е с т н ы х м е т о д ы р е ш е н и я . Эти м е т о д ы о р и е н т и р о в а н ы в п е р в у ю о ч е р е д ь на п р и м е н е н и е к о м п ь ю т е р а , п о з в о л я ю щ е г о з а н е б о л ь ш о е время выполнить большие объемы вычислений. К н и г а состоит из 5 г л а в , в к о т о р ы х п р и в о д я т с я с в е д е ­ н и я из т а к и х о б л а с т е й м а т е м а т и к и , к а к г е о м е т р и я , а р и ф ­ метика, комбинаторика и теория алгоритмов. Главы с о д е р ж а т теоретический материал, задачи для повторе­ ния, задачи повышенной сложности и з а д а ч и д л я само­ стоятельного решения. Т е о р е т и ч е с к и й м а т е р и а л н а п р а в л е н на то, ч т о б ы д а т ь п р е д с т а в л е н и е об о б щ и х п о д х о д а х и н а и б о л е е р а с п р о ­ страненных и эффективных методах решения задач. Ф р а г м е н т ы а л г о р и т м о в п р и в о д я т с я на а л г о р и т м и ч е с к о м языке, принятом в базовом курсе. Д л я задач повы­ ш е н н о й с л о ж н о с т и п р и в о д я т с я у к а з а н и я по их р е ш е н и ю . В конце книги д а н ы П р и л о ж е н и я , с о д е р ж а щ и е алго­ р и т м ы на я з ы к е П а с к а л ь . Т е о р е т и ч е с к и й м а т е р и а л , предназначенный для факультативных занятий, обозна­ чен з н а ч к о м *. При написании была использована отечественная и з а р у б е ж н а я л и т е р а т у р а по т е о р и и а л г о р и т м о в . 3
Глава 1. У Р А В Н Е Н И Е ПРЯМОЙ Г е о м е т р и я р а з в и в а е т с я по м н о г и м н а п р а в л е н и я м . Возникновение компьютеров привело к появлению такой области математики, как вычислительная геометрия. При создании современных приложений часто требуется разработка эффективных алгоритмов для определения в з а и м о р а с п о л о ж е н и я различных объектов на плоскости, вычисления расстояний между ними, вычисления площа­ дей ф и г у р и д р . В д а н н о й г л а в е и з л а г а е т с я м а т е р и а л , ч а с т и ч н о из­ в е с т н ы й в а м из к у р с а м а т е м а т и к и . М ы р а с с м о т р и м методы решения геометрических задач, которые эффек­ т и в н о р е а л и з у ю т с я с п о м о щ ь ю к о м п ь ю т е р а , что п о з в о л и т в а м по д р у г о м у в з г л я н у т ь на в о п р о с ы , и з у ч а е м ы е в р а м ­ к а х ш к о л ь н о г о к у р с а г е о м е т р и и . Д л я этого п р и д е т с я воспользоваться аналитическим представлением геомет­ рических объектов. § 1. П Р Я М Ы Е И О Т Р Е З К И НА ПЛОСКОСТИ 1.1. Формы записи уравнения прямой В з а д а ч а х ч а с т о п р и х о д и т с я з а д а в а т ь на п л о с к о с т и р а з л и ч н ы е г е о м е т р и ч е с к и е о б ъ е к т ы . П р о с т е й ш и м и гео­ м е т р и ч е с к и м и ф и г у р а м и на п л о с к о с т и я в л я ю т с я т о ч к а и п р я м а я . Точка задается указанием координат, напри­ м е р Л ( 1 5 ; —5),'B(xi\ Прямую можно задавать с помощью уравнения прямой. Существуют различные ф о р м ы записи у р а в н е н и я прямой. Выбор какой-то конк­ р е т н о й з а в и с и т от исходных д а н н ы х , з а д а ю щ и х п р я м у ю на п л о с к о с т и . ( М о г у т б ы т ь з а д а н ы к о о р д и н а т ы д в у х 4
точек, ч е р е з к о т о р ы е п р о в о д и т с я п р я м а я , или к о э ф ф и ц и ­ енты при неизвестных в линейном уравнении.) В декартовых координатах к а ж д а я прямая определя­ ется уравнением первой степени. Уравнение вида Ах + Ву + С = 0 н а з ы в а е т с я общим уравнением прямой. Если в общем уравнении прямой коэффициент при у не р а в е н н у л ю , то у р а в н е н и е м о ж н о р е ш и т ь о т н о с и т е л ь ­ но у: У = — в А Обозначая 6 = — — в и д а y — kx-\-b. х ~ с_ В' С и 6 = — — , получаем уравнение Е с л и ж е B — Q, то у р а в н е н и е имеет в и д Х С = ~ Т У р а в н е н и е y = kx-\-b н а з ы в а е т с я уравнением прямой с угловым коэффициентом; k — угловой коэффициент, b — в е л и ч и н а о т р е з к а , к о т о р ы й о т с е к а е т п р я м а я на оси Оу, с ч и т а я от н а ч а л а к о о р д и н а т ( р и с . I). У р а в н е н и е у — y = k(x — х ) — это уравнение прямой с угловым коэффициентом k, которая проходит через точку с координатами (х ; j ) . Р а с с м о т р и м д в е точки с к о о р д и н а т а м и (д^; у ) и 0 0 0 0 х х Рис. 1 Рис. 2 5
( ь У2% л е ж а щ и е на прямой y==kx-\-b. удовлетворяют уравнению прямой: И х координаты х y = kx + b, y = kx + b. l l 2 2 Вычитая из второго равенства первое, имеем У2 — У1 = к(х — х ), 2 или 1 k=-—-. 2— \ х х Пусть точка с координатами (х; у) — произвольная точка на прямой, проходящей через точки с координата­ ми (*,; y ) и (х \ у ) (рис. 2). Тогда, с учетом того факта, что она имеет тот ж е коэффициент наклона, получаем t 2 2 Поэтому У — У\ X — Jf | Уравнение Уг — У\ Х —\ х 2 и л и х—х, Х — X, у 2 у — у, — У\ 2 х—х, _ у—у, 2—\ Уч У\ х х я в л я е т с я уравнением прямой, которая проходит через точки с координатами ( # , ; у,) и (х ; у )Н е д о с т а т к о м э т о й ф о р м у л ы я в л я е т с я ее н е о п р е д е ­ л е н н о с т ь при х — х и ( и л и ) у = у . П о э т о м у ее л у ч ш е использовать в виде г х (х—х,) 2 х 2 2 (г/ — у ) — (у — г/,) (х — дс,) = 0. 2 х 2 Н е т р у д н о з а м е т и т ь , что в ы р а ж е н и е (* — Xi)(y — Ух)—(У — У\)(Х2 — х ) м о ж е т б ы т ь п р и в е д е н о к виду Ах + Ву + С, г д е А = у — г/„ В = х — х , С= —x (y — y ) + y {x — x ). Алгоритм для определения значений коэффициентов А, В, С о б щ е г о у р а в н е н и я п р я м о й , п р о х о д я щ е й ч е р е з точки ( j c , ; г/,) и (х ; у ), б у д е т с л е д у ю щ и м : 2 2 { х 2 x 2 l l 2 1 2 1 6 2 Здесь и далее приводятся только фрагменты алгоритмов. i
A : = y 2 —yl B:=xl-x2 С: = —xl*(y2 —yl)4-yl*(x2 —xl) (1.1) Р а с с м о т р и м п р и м е р : x = 0, у = 0, х =1, н е н и е п р я м о й , п р о х о д я щ е й ч е р е з точки (х ; будет следующим: t х 2 { у = 2. У р а в ­ у ) и (х ; у ), 2 х 2 А = у = 2-0 = 2, В = х —х = 0 — 1 = — 1, С = - х , (y -y ) + y (x -x )=0-2 + 0-l=0. Следовательно, уравнение прямой будет иметь 2х — гу = 0. 3 У у 2 1 2 2 i [ 2 l вид 1.2. П о л о ж е н и е точек относительно прямой М н о ж е с т в о точек прямой, проходящей через две точ­ ки с к о о р д и н а т а м и (х{, у ) и ( х ; у ), у д о в л е т в о р я е т у р а в ­ нению х (x — xi)(y 2 2 — y ) — (y — y ){x 2 1 l — x ) = 0. 2 l Э т о з н а ч и т , что е с л и и м е е т с я т о ч к а с к о о р д и н а т а м и (х ; г/ ) и ( х — х )(у — у ) — (у — у ){х — х ) = 0, т о э т а т о ч к а л е ж и т на п р я м о й . В д а л ь н е й ш е м в м е с т о выражения 0 0 0 х 2 х 0 х 2 { (* — Xi)(y — yi) — (y — yi)(x — Xi) мы и н о г д а б у д е м и с п о л ь з о в а т ь д л я к р а т к о с т и чение Ах + Ву + С или f(xi, у х , у , х, у). 2 2 ь 2 обозна­ 2 П р я м а я Ах + By + С — 0, п р о х о д я щ а я ч е р е з д в е з а ­ д а н н ы е т о ч к и с к о о р д и н а т а м и (х,; у ) и (х ; у ), р а з б и в а е т п л о с к о с т ь на д в е п о л у п л о с к о с т и . Р а с с м о т р и м в о з м о ж н ы е значения выражения Ах-\-Ву-\-С. 1) Ах-\-Ву-\~С = 0 — определяет геометрическое ме­ сто точек, л е ж а щ и х на п р я м о й . З а п и ш е м алгоритм для определения, л е ж и т ли точка с к о о р д и н а т а м и (х ; у ) на п р я м о й , п р о х о д я щ е й ч е р е з точки (х,; у ) и ( х ; у ). П е р е м е н н а я Р — п е р е м е н н а я логического типа, которая имеет значение «истина», если { 3 { 2 2 3 2 2 7
т о ч к а л е ж и т на п р я м о й , и и м е е т з н а ч е н и е « л о ж ь » в про­ тивном случае. Р : = «ложь» е с л и (хЗ — x l ) * ( y 2 — y l ) — ( у З — y l ) * ( x 2 — х1) = 0 | то Р : = « и с т и н а » все (1-2) 2) Ах-\-Ву-\С > 0 — о п р е д е л я е т г е о м е т р и ч е с к о е мес­ то т о ч е к , л е ж а щ и х по одну с т о р о н у от п р я м о й . 3) Ах-\-Ву-\-С<0— о п р е д е л я е т г е о м е т р и ч е с к о е мес­ то т о ч е к , л е ж а щ и х по д р у г у ю с т о р о н у от п р я м о й . Э т о з н а ч и т , что если д л я д в у х т о ч е к с к о о р д и ­ н а т а м и ( х ; у ) и (л: ; г/ ) з н а ч е н и я в ы р а ж е н и й Л х + -\-Ву -\-С и Л х , + Вг/ + С и м е ю т р а з н ы е з н а к и , то э т и т о ч к и л е ж а т по р а з н ы е с т о р о н ы от п р я м о й , п р о х о д я щ е й ч е р е з точки с к о о р д и н а т а м и (л:,; у ) и (х ; у ), а е с л и о д и н а к о в ы е , то э т и т о ч к и л е ж а т по о д н у сторону от прямой. При этом число 0 имеет з н а к и « + » и « — » . Н а р и с у н к е 3 т о ч к и (х ; у ) и ( х ; г/ ) л е ж а т по одну с т о р о н у от п р я м о й , т о ч к и ( j c ; у ) и (х ; у ) — по р а з н ы е с т о р о н ы от п р я м о й , а т о ч к а ( # ; у ) л е ж и т на прямой. Рассмотрим п р и м е р : Jt, = 1, # i = 2, х = Ъ, г/ = 6. У р а в н е н и е п р я м о й , п р о х о д я щ е й ч е р е з точки (*,; у) и (х ; у ), б у д е т с л е д у ю щ и м : 3 а 3 4 4 3 4 х ъ 2 3 2 4 3 4 3 5 6 ь 6 2 2 х 2 2 — ^1 = 6 — 2 = 4, ^ = ^ 2 В=х —х =1 — 5 = —4, С = —х {у — у) + + г/, (х — * , ) — — 1-4 + + 2 - 4 = 4. { 2 1 2 1 2 Рис. з 8 Следовательно, урав­ нение прямой будет иметь в и д : 4х — 4г/ + 4 = 0, или х — г / + 1 = 0. Подставим к о о р д и н а т ы т о ч е к (3; 4), ( 1 ; 1), (2; 0), (0; 2) в у р а в нение прямой. Получим:
1-3-1.4 + 1=0, Ы — Ы + 1>0, 1-2—1-0+1Х), 1-0-1-2+КО. С л е д о в а т е л ь н о , т о ч к а ( 3 ; 4) л е ж и т на п р я м о й , точки ( 1 ; 1) и (2; 0) л е ж а т по одну с т о р о н у от п р я м о й , а т о ч к и ( 1 ; 1) и (0; 2) — по р а з н ы е с т о р о н ы от п р я м о й . А л г о р и т м о п р е д е л е н и я в з а и м н о г о р а с п о л о ж е н и я то­ чек ( х ; у ) и (х ; у ) о т н о с и т е л ь н о п р я м о й , п р о х о д я щ е й ч е р е з т о ч к и (х ; у ) и (х , у ), м о ж н о з а п и с а т ь с л е д у ю щ и м образом: 3 3 4 х 4 х 2 2 L : = «по одну» Z l : = ( х З —xl)*(y2 —yl) — ( 3 - у 1 ) * ( х 2 —xl) У Z2: = ( х 4 — x l ) * ( y 2 - y l ) - ( y 4 - y l ) * ( x 2 — xl) если Z1*Z2<0 | то L : = « n o все разные» (1-3) 1.3. Взаимное р а с п о л о ж е н и е д в у х отрезков Пусть нам необходимо определить взаимное располо­ ж е н и е д в у х о т р е з к о в . О т р е з к и на п л о с к о с т и з а д а н ы к о о р д и н а т а м и своих к о н ц е в ы х точек. П р е д п о л о ж и м , что к о н ц е в ы е точки одного из о т р е з к о в и м е ю т к о о р д и н а т ы (х ; у ) и (х ; у ), а к о н ц е в ы е точки д р у г о г о — (х ; у ) и (х ; у ). П у с т ь о б щ е е у р а в н е н и е п е р в о й п р я м о й , п р о х о д я ­ щ е й ч е р е з точки (х \ г/,) и (х ; у ), и м е е т в и д А х + В у + С = 0, а у р а в н е н и е второй п р я м о й , п р о х о д я щ е й ч е р е з точки (х ; г/ ) и (х ; у ), в ы г л я д и т т а к : х 4 х 2 2 3 3 4 х 2 1 1 2 1 3 3 4 4 А х + В у + С = 0. 2 2 2 О п р е д е л и м р а с п о л о ж е н и е т о ч е к (х ; у ) и (х ; у) о т н о с и т е л ь н о п е р в о й п р я м о й . Е с л и они р а с п о л о ж е н ы по о д н у с т о р о н у от п р я м о й , то о т р е з к и не м о г у т п е р е с е к а т ь ­ ся. Аналогично можно определить положение точек (х ; у ) и (х ; у ) о т н о с и т е л ь н о д р у г о й п р я м о й . Т а к и м о б р а з о м , если з н а ч е н и я п а р ы в ы р а ж е н и й 3 х х 2 ъ 4 4 2 9
£i#i4­C, £|=^i*3 + У и Z = Ax + By + C имеют разные знаки или Z , ­ Z = 0, а т а к ж е п а р ы Z = Ax + By + C 2 l 4 l 4 l 2 3 2 и 2 о { 2 = Л лг + 4 2 2 { 2 В У2+С 2 2 имеют разные знаки или Z ­ Z = 0, то о т р е з к и п е р е с е к а ­ ются. Если ж е значения п а р Рис. 4 Z или Z­, выражении и м е ю т о д и н а к о в ы е з н а к и , то о т р е з к и не п е р е с е к а ­ 3 4 9 и Z ются. Различные случаи расположения отрезков показаны на р и с у н к е 4. Н а этом р и с у н к е о т р е з к и с к о н ц а м и в т о ч к а х (д^; /у,), {х \ у ) и (х ; у ), ( х ; у ) п е р е с е к а ю т с я , о т р е з к и с к о н ц а м и в т о ч к а х (*,; #,), (х , у ) и (х ; у ), (х , у ) не п е р е с е к а ю т с я , а о т р е з к и с к о н ц а м и в т о ч к а х (х ; у ), (х , у ) и (х \ у) (х^ Уь) и м е ю т о б щ у ю в е р ш и н у . П о с л е д н и й с л у ч а й можно считать частным случаем пересечения. Алгоритм для определения, пересекаются ли два о т р е з к а с к о н ц а м и в т о ч к а х {х ; у ), (х ; у ) и (х ; у ), ( х ; у ), б у д е т с л е д у ю щ и м : 4 2 2 4 4 5 5 2 2 3 3 4 3 4 3 4 4 4 4 и х { 2 2 3 3 4 4 Р : = «истина» Z I : = ( x 3 —xl)*(y2­ • 1 ) ­ ( у З ­ у 1 ) * ( х 2 ­ х 1 ) У Z 2 : = (х4 — x l ) * ( y 2 ­ • у 1 ) ­ ( у 4 ­ у 1 ) * ( х 2 ­ х 1 ) если Zl*Z2>0 | то Р : = « л о ж ь » (1.4) все Z3: =(xl—хЗ)*(у4­ •У3)­(у1­ у З ) * ( х 4 ­ •хЗ) Z4: = (х2­хЗ)*(у4­ •У3)­(у2­ у З ) * ( х 4 ­ •хЗ) если Z3*Z4>0 | то Р : = « л о ж ь » все Приведенный 10 фрагмент алгоритма не учитывает
к р а й н е й с и т у а ц и и , к о г д а д в а о т р е з к а л е ж а т на прямой. В этом случае (*з — х,)(у — y )~(Уз—yi)(x а t — x )=0 2 одной и (х —х,)Х t 4 Х(у —У\)—(У*—Ух)(х —х,)=0. 2 2 Н а р и с у н к е 5 о т р е з к и , л е ж а щ и е н а одной п р я м о й , не п е р е с е к а ю т с я , а на рисунке б — п е р е с е к а ю т с я . Д л я того чтобы определить взаимное р а с п о л о ж е н и е т а к и х о т р е з к о в , поступим с л е д у ю щ и м о б р а з о м . О б о з н а ч и м k — m\n(x{, х ); k — ma\{x \ х ); fc = m i n ( x ; х )\ k = = т а х ( д г ; x ). З д е с ь ky я в л я е т с я л е в о й , a k — п р а в о й т о ч к о й п р о ­ екции первого отрезка (отрезка, заданного координатами (Хи У\)у (х ; у )) н а о с ь Ох. А н а л о г и ч н о k я в л я е т с я л е в о й , a k — правой точкой проекции второго отрезка (отрезка, з а д а н н о г о к о о р д и н а т а м и (х ; у ), (х ; у )) на о с ь Ох. А н а ­ л о г и ч н о и щ е м п р о е к ц и и н а ось Оу. { 2 3 2 i 2 3 3 4 4 4 2 2 2 3 4 3 О т р е з к и , л е ж а щ и е на одной прямой, будут пере­ с е к а т ь с я т о г д а , к о г д а их п р о е к ц и и на к а ж д у ю ось пересекаются. (Следует з а м е т и т ь , что е с л и п р о е к ­ ции д в у х произвольных отрезков пересекаются, т о э т о не з н а ч и т , что и сами отрезки пересека­ ю т с я , что в и д н о на р и ­ с у н к е 7.) 3 4 4 Рис. 7 11
Д л я определения взаимного расположения проекций на ось Ох в о с п о л ь з у е м с я с л е д у ю щ и м ф а к т о м (см. р и с . 5 и 6): к о о р д и н а т а л е в о й точки п е р е с е ч е н и я п р о е к ц и й L р а в н а т а х ( й , ; й ) , т. е. м а к с и м а л ь н о й из к о о р д и н а т левых точек проекций. Р а с с у ж д а я аналогично для пра­ вых т о ч е к п р о е к ц и й , п о л у ч и м , что к о о р д и н а т а п р а в о й точки R п е р е с е ч е н и я р а в н а m i n (k , й ) . Д л я того ч т о б ы о т р е з к и п е р е с е к а л и с ь , н е о б х о д и м о , чтобы л е в а я к о о р д и ­ н а т а п е р е с е ч е н и я п р о е к ц и й б ы л а не б о л ь ш е п р а в о й координаты пересечения отрезков (такой случай имеет м е с т о на р и с . 5, к о г д а L = x , a R = x ). П о э т о м у у с л о в и ­ ем п е р е с е ч е н и я п р о е к ц и й я в л я е т с я в ы п о л н е н и е н е р а ­ венства L ^R . x 3 x 2 x X 3 4 x 2 X Аналогично можно вычислить величины L и R , взяв с о о т в е т с т в у ю щ и е п р о е к ц и и на ось Оу. С л е д у е т о т м е т и т ь , что д л и н а п е р е с е ч е н и я п р о е к ц и й в этом с л у ч а е р а в н а в е л и ч и н е R —L ( е с л и R —L = О, то п р о е к ц и и и м е ю т т о л ь к о о б щ у ю т о ч к у ) . y x x y x x 1.4. Точка пересечения отрезков Д л я определения места пересечения отрезков (если и з в е с т н о , что они п е р е с е к а ю т с я ) , д о с т а т о ч н о о п р е д е л и т ь точку п е р е с е ч е н и я п р я м ы х , на к о т о р ы х эти о т р е з к и лежат. П у с т ь A x-\-B y-\-C = Q — у р а в н е н и е п р я м о й , прохо­ дящей через концевые точки первого отрезка, а А х-\- j - f i 2 t y + C = 0 — уравнение прямой, проходящей через кон­ ц е в ы е точки в т о р о г о о т р е з к а . Тогда д л я определения точки пересечения отрезков достаточно решить систему уравнений l l l 2 2 Д о м н о ж и в п е р в о е у р а в н е н и е на А , 2 получим 12 а в т о р о е — на А и
(А А х + А В у=—А С , [A A x + A B y=-A C . 2 1 Вычитаем з н а ч е н и е у: 1 2 я 1 а l 2 из п е р в о г о у р а в н е н и я У 1 l 2 второе и находим А В,-А,В = 2 2 Аналогично вычисляем значение х: в,с —В С, В%А — В,А 2 2 2 2 Это с п р а в е д л и в о в с л у ч а е , е с л и А -В — А -В Ф0. Но м ы у ж е з н а е м , что о т р е з к и п е р е с е к а ю т с я и не л е ж а т на одной п р я м о й , а это н е в о з м о ж н о , если А -В — АВ = 0. 2 х 1 2 2 х г 2 Вопросы д л я повторения 1. Как о п р е д е л и т ь к о э ф ф и ц и е н т ы о б щ е г о у р а в н е н и я п р я м о й , если известно уравнение прямой с угловым коэффициентом? 2. К а к и м м о ж е т б ы т ь в з а и м н о е р а с п о л о ж е н и е о т р е з к а и п р я ­ мой? 3. Как о п р е д е л и т ь , ч т о о т р е з к и п а р а л л е л ь н ы ? 4. Как о п р е д е л и т ь в з а и м н о е р а с п о л о ж е н и е д в у х п а р а л л е л ь ­ ных о т р е з к о в ? § 2. Р А С С Т О Я Н И Е КА ПЛОСКОСТИ 2 . 1 . Расстояние м е ж д у точками. Расстояние от точки д о прямой Р а с с т о я н и е м е ж д у т о ч к а м и М (х ; у ) и М (х ; п л о с к о с т и ( р и с . 8) о п р е д е л я е т с я по ф о р м у л е х D ^ ( x A - x 2 f + { ( y i х 2 2 у) 2 на -y f. 2 Р а с с т о я н и е от точки до п р я м о й на п л о с к о с т и о п р е д е ­ ляется как длина отрезка перпендикуляра, опущенного из точки на п р я м у ю . У р а в н е н и е в и д а 13
Ах j. 2 . By . С _ j ~т~ j о, п ~г" 2 где Т=\А -\-В , причем С < ! 0 (чего можно достигнуть изменением знака выражения), называется нормальным уравнением прямой. Это у р а в н е н и е о б л а д а е т тем свой­ с т в о м , что п р и п о д с т а н о в к е к о о р д и н а т п р о и з в о л ь н о й точки в в ы р а ж е н и е {Ах-\- By -\- С)/Т п о л у ч а е т с я з н а ч е ­ ние, по а б с о л ю т н о й в е л и ч и н е р а в н о е р а с с т о я н и ю от точки д о п р я м о й ( р и с . 9). З а п и ш е м а л г о р и т м д л я о п р е д е л е н и я р а с с т о я н и я от точки (х ; у ) до п р я м о й , п р о х о д я щ е й ч е р е з точки {х ; у ) и (х ; у ): 3 2 3 х { 2 А : = у 2 —yl В : = x l — х2 С: = xl*(y2 —yl) + yl*(x2 —xl) (1.5) Т: = S Q R T ( A * A + B *B ) D: = A B S ( ( A * x 3 + B *y3 + C)/T) Р а с с м о т р и м п р и м е р . П у с т ь х = 0, / у , = 0 , х — 3, у = 4, х = — 1, у = 7. Т о г д а у р а в н е н и е п р я м о й , п р о х о д я щ е й ч е р е з т о ч к и (л:,; у ) и (х ; у ), б у д е т с л е д у ю щ и м : х 3 2 2 3 { 2 2 Л = г/ — ^ 1 = 4 — 0 = 4, В — х — х — 0 — 3 = — 3, ~ i(Vz~ yi) + yi( 2 — *i) = 0 ­ 4 + 0 ­ 3 = 0, Т=^А* + В = V 4 ­ 4 + ( — 3 ) ( —3T = V25 = 5 , £> = \(Ax + By +C)/T\ = | ( 4 ( ­ l) + ( _ 3 ) 7 + 0)/5|=5. 2 х С = = 2 x x 2 3 14 3 +
2.2. Расстояние м е ж д у точкой и отрезком Д л я определения расстояния м е ж д у точкой и отрез­ ком н е о б х о д и м о в ы я с н и т ь , п е р е с е к а е т л и п е р п е н д и к у л я р , о п у щ е н н ы й из д а н н о й т о ч к и на п р я м у ю , п р о х о д я щ у ю через концы отрезка, сам отрезок. Если перпендикуляр п е р е с е к а е т о т р е з о к , то р а с с т о я н и е м е ж д у т о ч к о й и о т р е з ­ ком р а в н о р а с с т о я н и ю м е ж д у т о ч к о й и п р я м о й , п р о х о д я ­ щ е й ч е р е з о т р е з о к . ( Э т у з а д а ч у вы у ж е у м е е т е р е ш а т ь . ) Е с л и п е р п е н д и к у л я р не п е р е с е к а е т о т р е з о к , то р а с ­ стояние м е ж д у точкой и отрезком равно м и н и м а л ь н о м у из р а с с т о я н и й м е ж д у т о ч к о й и о д н и м из к о н ц о в о т р е з к а . Д л я определения взаимного расположения отрезка и перпендикуляра поступим следующим образом. Рассмотрим треугольник, образованный тремя точка­ ми, д в е из к о т о р ы х (х ; у ) и (х ; у ) я в л я ю т с я к о н ц а м и данного отрезка, а третья — д а н н а я точка с координата­ ми (ж ; у ) ( р и с . 10). К о н е ч н о , м о ж е т о к а з а т ь с я , что все т о ч к и л е ж а т на о д н о й п р я м о й и т а к о г о т р е у г о л ь н и к а не существует. В этом случае, однако, мы будем полагать, что т р е у г о л ь н и к с у щ е с т в у е т , п р а в д а он в ы р о ж д е н н ы й (особый). В в ы р о ж д е н н о м треугольнике вершины могут л е ж а т ь на о д н о й п р я м о й ( с м . р и с . 10, а). Б о л е е того, м ы б у д е м п о л а г а т ь , что д а н н ы й о т р е з о к является основанием рассматриваемого треугольника ( с м . р и с . 10, б, в). П р и т а к и х п р е д п о л о ж е н и я х д л я р е ш е н и я исходной з а д а ч и н а м д о с т а т о ч н о о п р е д е л и т ь , я в л я е т с я л и один из у г л о в при о с н о в а н и и т у п ы м . Д е й с т в и т е л ь н о , е с л и один из х 3 х 2 2 3 ху 2 а 2 6 Рис. 10 15
у г л о в при о с н о в а н и и т у п о й , то п е р п е н д и к у л я р , о п у щ е н ­ ный из в е р ш и н ы , с о о т в е т с т в у ю щ е й исходной т о ч к е , не п о п а д а е т на о с н о в а н и е ( о т р е з о к ) . Е с л и угол не т у п о й , то п е р п е н д и к у л я р , о п у щ е н н ы й из в е р ш и н ы , с о о т в е т с т в у ю ­ щей исходной т о ч к е , п о п а д а е т на о с н о в а н и е ( о т р е з о к ) . Д л я решения последней задачи воспользуемся следу­ ю щ и м с в о й с т в о м . П у с т ь а, Ь, с — д л и н ы сторон т р е у г о л ь ­ н и к а , п р и ч е м с •— д л и н а о с н о в а н и я . Т о г д а т р е у г о л ь н и к я в л я е т с я т у п о у г о л ь н ы м п р и о с н о в а н и и , если а >Ь 2 + с 2 2 или Ь >а +с . 2 2 2 Поэтому, вычислив значения к в а д р а т о в длин сторон, н е т р у д н о о п р е д е л и т ь , п е р е с е к а е т л и п е р п е н д и к у л я р , опу­ щ е н н ы й из т о ч к и (х ; у ) на п р я м у ю , о т р е з о к с к о н ц а м и в т о ч к а х {х{, у ) и (х ; у ). И е с л и не п е р е с е к а е т , то р а с ­ с т о я н и е от точки д о о т р е з к а р а в н о м и н и м у м у из в е л и ч и н а, Ь. Е с л и ж е п е р е с е к а е т , то н е о б х о д и м о в о с п о л ь з о в а т ь с я ф о р м у л о й р а с с т о я н и я от точки до п р я м о й . 3 х 3 2 2 Вопросы для повторения 1. Как о п р е д е л и т ь р а с с т о я н и е м е ж д у д в у м я т о ч к а м и ? 2. Ч е м у р а в н о р а с с т о я н и е м е ж д у т о ч к о й и п р я м о й ? 3. Как о п р е д е л я е т с я р а с с т о я н и е м е ж д у о т р е з к а м и ? § 3. МНОГОУГОЛЬНИКИ 3 . 1 . Виды многоугольников Ломаной н а з ы в а е т с я ф и г у р а , к о т о р а я состоит из то­ чек А А , А и с о е д и н я ю щ и х их о т р е з к о в А А АА, А_А ( р и с . 11, а ) . Т о ч к и н а з ы в а ю т с я вершинами л о м а н о й , а о т р е з к и — звеньями. Наиболее распростра­ ненным способом з а д а н и я ломаной является использова­ ние т а б л и ц ы , э л е м е н т ы которой с о о т в е т с т в у ю т к о о р д и н а ­ т а м в е р ш и н л о м а н о й в п о р я д к е ее о б х о д а из одного к о н ц а в д р у г о й . Длиной ломаной называется сумма длин ее з в е н ь е в . ь п 16 2 х п п У Ъ 2 3
Рис. 11 Многоугольником называется замкнутая ломаная ли­ ния б е з с а м о п е р е с е ч е н и й ( р и с . 1 1 , 6 ) . Плоским многоугольником называется конечная часть плоскости, ограниченная многоугольником (рис. 11, в). Обход плоского многоугольника называется положи­ тельным, е с л и п р и обходе о б л а с т ь р а с п о л о ж е н а по л е ­ в у ю р у к у , и отрицательным, е с л и о б л а с т ь о с т а е т с я по правую руку. Р а с с т о я н и е м е ж д у ф и г у р а м и на п л о с к о с т и о п р е д е л я ­ е т с я к а к д л и н а м и н и м а л ь н о г о о т р е з к а , один к о н е ц кото­ рого п р и н а д л е ж и т одной ф и г у р е , а второй к о н е ц — д р у ­ гой ф и г у р е . 3.2. Выпуклость многоугольников М н о г о у г о л ь н и к я в л я е т с я выпуклым, если д л я к а ж д о й п р я м о й , п р о х о д я щ е й ч е р е з л ю б у ю его с т о р о н у , все о с т а л ь н ы е в е р ш и н ы л е ж а т в одной п о л у п л о с к о с т и отно­ с и т е л ь н о п р я м о й . П р о в е р и м д л я к а ж д о й п р я м о й , прохо­ д я щ е й ч е р е з в е р ш и н ы (х,.; У\) и (х , у ), (х \ у ) и (х ; у ), 2 2 2 2 3 3 (x„-i\ Уп-\) и (*„; у„), (х ; у ) и (*,; г/,), в з а и м н о е р а с п о ­ л о ж е н и е в е р ш и н м н о г о у г о л ь н и к а . Е с л и они к а ж д ы й р а з р а с п о л о ж е н ы в одной п о л у п л о с к о с т и о т н о с и т е л ь н о п р о ­ в е д е н н о й п р я м о й , то м н о г о у г о л ь н и к в ы п у к л ы й . Е с л и ж е п п 17
Рис. 12 н а й д е т с я п р я м а я , п р о х о д я щ а я ч е р е з о д н у из с т о р о н , и п а р а в е р ш и н м н о г о у г о л ь н и к а , л е ж а щ и х по р а з н ы е с т о р о н ы о т н о с и т е л ь н о п р о в е д е н н о й п р я м о й , то м н о г о ­ у г о л ь н и к не я в л я е т с я в ы п у к л ы м . С л у ч а и в ы п у к л о г о и не­ в ы п у к л о г о м н о г о у г о л ь н и к о в и з о б р а ж е н ы на р и с у н к е 12. М о ж н о з а м е т и т ь , что д л я к а ж д о й п р я м о й , п р о х о д я ­ щ е й ч е р е з в е р ш и н ы (*,; t/,) и ( х ; у ), (х , у ) и ( х ; у ), (*„_i; # „ _ , ) и {х ; у ), (х„; у ) и (*,; у , ) , д о с т а т о ч н о о г р а н и ­ читься определением взаимного расположения вершин м н о г о у г о л ь н и к а (х„; у ) и (х ; у ), (ж,; */,) и ( х ; у ) 2 п п 2 2 2 3 ъ а п 3 ъ 4 4 (х -2> Уп-г) и (*,; У\), ( x „ _ i ; y„-i) и (х ; у ) с о о т в е т с т в е н н о . Е с л и они к а ж д ы й р а з р а с п о л о ж е н ы в одной п о л у п л о с к о ­ сти о т н о с и т е л ь н о п р о в е д е н н о й п р я м о й , то м н о г о у г о л ь н и к выпуклый. Если же найдется прямая и пара вершин м н о г о у г о л ь н и к а , л е ж а щ и х по р а з н ы е с т о р о н ы о т н о с и ­ т е л ь н о п р о в е д е н н о й п р я м о й , то м н о г о у г о л ь н и к не я в л я ­ ется в ы п у к л ы м . Поэтому д л я определения, является ли многоугольник выпуклым, достаточно воспользоваться а л г о р и т м о м (1.6). п 2 2 L : == « В ы п у к л ы й » нц д л я i от 1 до п j : = m o d ( i , n)-f-l k:=mod(j, п)+1 m: = i — 1 если i = 1 I то m : = n гномер в е р ш и н ы после в е р ш и н ы i : н о м е р в е р ш и н ы после в е р ш и н ы j : н о м е р в е р ш и н ы п е р е д вершиной i все Z l : = ( х [ m ] - x [i])*(y [ j ] -хШ) 18 y (1-6) [ i ] ) - ( y [ r n ] - y [i])*(x [ j ] -
Z2:=(x[k]-x[i])*(y[j]-y[i])-(y[k]-y[i])*(x[j]-x[i]) если Z 1 * Z 2 < 0 I то L : = « Н е в ы п у к л ы й » все кц Вопросы для 1. К а к и е б ы в а ю т о б х о д ы повторения многоугольника? 2. Какой м н о г о у г о л ь н и к н а з ы в а е т с я § 4. П Л О Щ А Д И выпуклым? ФИГУР 4 . 1 . П л о щ а д ь треугольника Д л я в ы ч и с л е н и я п л о щ а д и т р е у г о л ь н и к а ( р и с . 13) и з ­ вестна формула Герона: S=^p(p~a)(p-b)(p-c), где а, Ь, с — д л и н ы сторон т р е у г о л ь н и к а , а р — его п о л у п е р и м е т р , т. е. р = (а-\-b + с ) / 2 . Т а к к а к при з а д а н н ы х к о о р д и н а т а х в е р ш и н т р е у г о л ь ­ н и к а м о ж н о в ы ч и с л и т ь д л и н ы его сторон, то а л г о р и т м п о и с к а п л о щ а д и т р е у г о л ь н и к а с в о д и т с я к поиску д л и н сторон и и с п о л ь з о в а н и ю ф о р м у л ы Г е р о н а . р : = ( а + Ь + с)/2 S : = SQRT (р*(р — а)*(р —Ь)*(р —с)) (1.7) Однако такой метод вычисления площади имеет один с у щ е с т в е н н ы й н е д о с т а т о к : н е о б х о д и м о в ы п о л н е н и е операции нахождения квад­ р а т н о г о к о р н я из ч и с л а . П р и в ы п о л н е н и и этой о п е р а ц и и часто происходит потеря точ­ ности, что м о ж е т п р и в е с т и к а А \\\\хш& получению не совсем точного р е з у л ь т а т а . П о э т о м у , чтобы и з б е ж а т ь возможных оши­ бок, в д а л ь н е й ш е м будут использоваться другие фор­ мулы. Рис. 13 19
4.2. П л о щ а д ь прямоугольника Ху г 2 М ы будем рассматривать п р я м о у г о л ь н и к и , с т о р о н ы кото­ рых п а р а л л е л ь н ы осям коорди­ н а т ( р и с . 14). В этом с л у ч а е п р я м о у г о л ь ­ ник м о ж е т б ы т ь о п р е д е л е н од­ ной из с в о и х д и а г о н а л е й . Это з н а ч и т , что п а р а точек на п л о ­ Рис. 14 с к о с т и с к о о р д и н а т а м и (х ; у) и (х ; у ), с о о т в е т с т в у ю щ а я к о н ц а м д и а г о н а л и , о д н о з н а ч ­ но о п р е д е л я е т р а с п о л о ж е н и е и р а з м е р п р я м о у г о л ь н и к а . Такое задание более удобно вместо описания прямоуголь­ ника посредством последовательности вершин в порядке о б х о д а . К р о м е того, при т а к о м з а д а н и и л е г к о в ы ч и с л и т ь п л о щ а д ь п р я м о у г о л ь н и к а по ф о р м у л е { 2 { 2 S=\(x 2 — x )(y i 2 — y )\, 1 где \(x — Xi)\ — д л и н а п р о е к ц и и п р я м о у г о л ь н и к а на ось Ох ( д л и н а стороны, п а р а л л е л ь н о й оси Ох), а \(у — у )\ — д л и н а п р о е к ц и и п р я м о у г о л ь н и к а на ось Оу ( д л и н а с т о р о н ы , п а р а л л е л ь н о й оси Оу). 2 2 { 4 . 3 . П л о щ а д ь трапеции М ы б у д е м р а с с м а т р и в а т ь т р а п е ц и и , о с н о в а н и я кото­ р ы х п а р а л л е л ь н ы оси Оу, о д н а из б о к о в ы х сторон л е ­ ж и т на оси Ох, а д р у г а я р а с п о л о ж е н а в ы ш е оси Ох ( р и с . 15). В этом с л у ч а е т р а п е ц и я мо­ ж е т б ы т ь о п р е д е л е н а п а р о й то­ чек (*,; у ) и (х ; у ), с о о т в е т с т ­ вующих вершинам трапеции, О х не л е ж а щ и м на оси Ох. П р и таком з а д а н и и легко вычис­ лить площадь трапеции по формуле Рис. 15 х 20 2 2
s где \x — X [ | — в ы с о т а оснований. 2 1*2 — *il(y + yt) 2 a трапеции, a y 2 я У\— длины ее 4.4. П л о щ а д ь плоского многоугольника С н а ч а л а мы р а с с м о т р и м п л о с к и е м н о г о у г о л ь н и к и , р а с п о л о ж е н н ы е в ы ш е оси Ох. Традиционно при подсчете п л о щ а д и произвольно­ го м н о г о у г о л ь н и к а его р а з б и в а ю т на треугольники и н а х о д я т п л о щ а д ь к а ж д о г о из них. С у м м а п л о щ а д е й этих треугольников равна п л о щ а д и данного многоуголь­ ника. О д н а к о при этом возникает вопрос, каким образом д е л а т ь это р а з б и е н и е , если м н о г о у г о л ь н и к з а д а н к о о р д и ­ н а т а м и л о м а н о й в п о р я д к е ее о б х о д а и при этом не является выпуклым. Б о л е е р а ц и о н а л ь н ы м способом нахождения п л о щ а д и м н о г о у г о л ь н и к а я в л я е т с я его п р е д с т а в л е н и е в в и д е к о м ­ б и н а ц и и т р а п е ц и й . П р и этом с ч и т а е т с я , что если р а с ­ с м а т р и в а е т с я т р а п е ц и я , у которой лг, < х , то з н а ч е н и е ее п л о щ а д и б е р е т с я со з н а к о м ( р и с . 16, а ) , а если х ~>х то з н а ч е н и е ее п л о щ а д и б е р е т с я со з н а к о м « — » ( р и с . 16, б). При вычислении значения площади используется формула 2 { ъ б а У гУг х + О О X Рис. 16 21
]Хг — х,\(У2 + У\) с И с п о л ь з у я т а к о й подход, ф о р м у л а д л я п о д с ч е т а п л о ­ щ а д и многоугольника, определяемого ломаной с коорди­ натами вершин «/,), (jt ; у ), ( * „ _ , ; # „ _ , ) , (х ; у ), примет следующий вид: 2 _\(x —x )(y +y ) s i l 2 2 п ^ (х —х )(,у +у ) l 3 2 3 ^ 2 п | ( * | — * „ ) ( У | + У„)| или (x -x ){y +y )+(x -x )(y +y )+...+(x -x„)(y +y ) 2 l 2 x 3 2 3 2 l i n П р и п = 3 и п = 4 эти ф о р м у л ы могут быть использо­ в а н ы д л я вычисления п л о щ а д е й треугольников и четы­ рехугольников соответственно. П р и этом совершенно безразлично, в ы п у к л ы й мно­ г о у г о л ь н и к и л и нет ( р и с . 17). Б о л е е т о г о , в ы ч и с л е ­ ние п л о щ а д и т р е б у е т в ы п о л н е н и я т о л ь к о о п е р а ц и й сло­ ж е н и я , в ы ч и т а н и я , у м н о ж е н и я и одной о п е р а ц и и д е ­ ления. П р и б о л е е д е т а л ь н о м и з у ч е н и и о к а з ы в а е т с я , что п р и ­ в е д е н н а я в ы ш е ф о р м у л а м о ж е т использоваться д л я про­ и з в о л ь н ы х т о ч е к на п л о с к о с т и , т. е. точки м о г у т р а с п о л а г а т ь ­ ся и н и ж е оси Ох. П р а в д а , при этом необходимо п р е д в а р и т е л ь ­ но о с у щ е с т в и т ь п р е о б р а з о в а ­ ние к о о р д и н а т по ф о р м у л е Hi Рис. 17 22 IJi ' i/min' Д Утт — м и н и м а л ь н о е з н а ч е ­ ние у к о о р д и н а т ы д л я в е р ­ шин м н о г о у г о л ь н и к а в исход­ ной с и с т е м е к о о р д и н а т . Т а к о е преобразование соответствует п а р а л л е л ь н о м у п е р е н о с у мног о у г о л ь н и к а п а р а л л е л ь н о оси г е
Оу и г а р а н т и р у е т , что в новой с и с т е м е к о о р д и н а т ни одна вершина многоугольника не будет расположена ниже оси Ох. Алгоритм д л я определения п л о щ а д и плоского много­ у г о л ь н и к а , з а д а н н о г о к о о р д и н а т а м и его в е р ш и н в п о р я д ­ ке их о б х о д а по к о н т у р у , б у д е т т а к и м . (Внимание! З д е с ь и в дальнейшем мы будем предпо­ л а г а т ь , что о б х о д м н о г о у г о л ь н и к а з а д а е т с я n + 1 в е р ш и ­ ной, п р и ч е м («-{- 1)-я в е р ш и н а с о в п а д а е т с п е р в о й в е р ш и ­ ной о б х о д а . ) ymin:=y[l] н ц д л я к от 2 д о п если у г ш ' п > у [ к ] | то y m i n : = у [к] все кц н ц д л я к от 1 д о n + l | yl[k]:=y[k]-ymin (1.8) КЦ S:=0 нц д л я к от 1 до п | S : = S + ( x [ k + l ] - x [ k ] ) * ( y l [ к + 1] + у1 [к]) КЦ S:=ABS(S)/2 Вопросы для повторения 1. Как м о ж н о в ы ч и с л и т ь п л о щ а д ь т р е у г о л ь н и к а , е с л и и з в е с т н ы координаты его вершин? 2. Какие п р е о б р а з о в а н и я м о ж н о сделать, чтобы многоугольник л е ж а л в ы ш е о с и Ох? 3. К а к о й с п о с о б в ы ч и с л е н и я п л о щ а д и т р е у г о л ь н и к а б о л е е э ф ­ ф е к т и в е н : ф о р м у л а Г е р о н а или о б щ а я ф о р м у л а ? § 5. В З А И М Н О Е Р А С П О Л О Ж Е Н И Е НА П Л О С К О С Т И ФИГУР 5 . 1 . Взаимное р а с п о л о ж е н и е многоугольника и точки С у щ е с т в у е т много с п о с о б о в о п р е д е л е н и я в з а и м н о г о р а с п о л о ж е н и я м н о г о у г о л ь н и к а и т о ч к и . Р а с с м о т р и м один из н а и б о л е е у п о т р е б и т е л ь н ы х с п о с о б о в , к о т о р ы й н а з ы в а 23
е т с я методом сканирующей прямой, и о с н о в ы в а е т с я на следующем. Н а х о д я с ь в д а н н о й т о ч к е (х ; у ), м ы н а ч и н а е м д в и ­ гаться в одном н а п р а в л е н и и (это может быть любое н а п р а в л е н и е , н а п р и м е р , п а р а л л е л ь н о оси Ох), п о д с ч и т ы ­ в а я п р и э т о м к о л и ч е с т в о п е р е с е ч е н н ы х сторон м н о г о ­ угольника. Д в и ж е н и е з а к а н ч и в а е т с я тогда, когда мы у й д е м д о с т а т о ч н о д а л е к о , и ни о д н а с т о р о н а м н о г о у г о л ь ­ н и к а у ж е не с м о ж е т в с т р е т и т ь с я на н а ш е м п у т и . О к а з ы ­ в а е т с я , что е с л и п р и н а ш е м д в и ж е н и и б ы л о п е р е с е ч е н о нечетное ч и с л о с т о р о н м н о г о у г о л ь н и к а , то и с х о д н а я точ­ ка л е ж и т в н у т р и м н о г о у г о л ь н и к а ( р и с . 18, а), а е с л и б ы л о п е р е с е ч е н о четное ч и с л о с т о р о н , то т о ч к а л е ж и т с н а р у ж и ( р и с . 18 6, в). 0 0 М а р ш р у т нашего движения может быть представлен в в и д е о т р е з к а , к о о р д и н а т ы одной к о н ц е в о й точки кото­ рого р а в н ы к о о р д и н а т а м исходной т о ч к и , а о д н а из координат другой концевой точки больше (или меньше) любой соответствующей координаты вершин многоуголь­ ника. В э т о м с л у ч а е з а д а ч а в з а и м н о г о р а с п о л о ж е н и я мно­ гоугольника и точки сводится к подсчету числа пересече­ ния п о л у ч е н н о г о о т р е з к а и сторон м н о г о у г о л ь н и к а . Д р у ­ г а я к о о р д и н а т а м о ж е т б ы т ь л ю б о й . О б ы ч н о ее б е р у т р а в н о й с о о т в е т с т в у ю щ е й к о о р д и н а т е исходной т о ч к и . В этом с л у ч а е м а р ш р у т д в и ж е н и я п р о и с х о д и т в д о л ь одной из осей к о о р д и н а т . Рис. 18 24
В этом с л у ч а е з а д а ч а в з а и м н о г о р а с п о л о ж е н и я м н о ­ г о у г о л ь н и к а и точки с в о д и т с я к п о д с ч е т у ч и с л а п е р е с е ч е ­ ний п о л у ч е н н о г о о т р е з к а и сторон многоугольника. В м а с с и в а х X и У х р а н я т с я к о о р д и н а т ы в е р ш и н много­ у г о л ь н и к а в п о р я д к е о б х о д а , х[0], у[0] — к о о р д и н а т ы исходной т о ч к и . xmin: = х [ 1 ] н ц д л я к от 2 до п если x m i n > x [ k ] | то x m i n : = х [ к ] все кц х: = x m i n — 1 У.=У[0] S:=0 н ц д л я i от 1 до п (1.9) Zl:=(x[i]-x[0])*(y-y[0])-(y[i]-y[0])*(x-x[0]) Z2:=(x[i + l]-x[0])*(y-y[0])-(y[i+l]- _y[0]).(x-x[0]) если Z 1 * Z 2 < 0 I то S : = S + 1 все кц L:=«внутри» если mod ( S , 2 ) = 0 I то L : = «вне» все Т а к о й п о д х о д т р е б у е т особого а н а л и з а с л у ч а е в , к о г д а полученный отрезок пересекает сторону многоугольника в концевой точке. Е с л и о т р е з о к п е р е с е к а е т одну из в е р ш и н м н о г о у г о л ь ­ н и к а ( н а п р и м е р , А ), т о м о ж е т б ы т ь 2 с л у ч а я ( р и с . 19): 1) О б е с т о р о н ы м н о г о у г о л ь н и к а , в х о д я щ и е в в е р ш и н у А л е ж а т по о д н у с т о р о н у от о т р е з к а ( р и с . 19, а ) . К о л и ­ ч е с т в о п е р е с е ч е н и й м о ж н о с ч и т а т ь р а в н ы м 2 ( и л и 0); х ъ 25
At a Рис. 19 2) с т о р о н ы м н о г о у г о л ь н и к а , в х о д я щ и е в в е р ш и н у Л , , л е ж а т по р а з н ы е с т о р о н ы о т р е з к а ( р и с . 19, б). Ч и с л о п е р е с е ч е н и й п р и м е м р а в н ы м 1. Д л я п р о в е р к и , по р а з н ы е или по о д н у с т о р о н у от прямой л е ж а т стороны многоугольника, можно использо­ в а т ь а л г о р и т м (1.3). Е с л и о т р е з о к п р о х о д и т по с т о р о н е , то ч и с л о п е р е с е ч е ­ ний б у д е м с ч и т а т ь р а в н ы м 2. 5.2. В з а и м н о е р а с п о л о ж е н и е многоугольников Возможны 3 варианта взаимного расположения мно­ г о у г о л ь н и к о в : они м о г у т п е р е с е к а т ь с я ( р и с . 20, а), л е ж а т ь один в н у т р и д р у г о г о ( р и с . 20, б) или р а с п о л а г а т ь с я к а ж ­ д ы й в н е д р у г о г о ( р и с . 20, в). Определение взаимного расположения многоугольни­ ков, з а д а н н ы х о б х о д а м и своих в е р ш и н , б у д е т п р о в о д и т ь ­ ся в д в а э т а п а . Первый э т а п . Д л я того ч т о б ы о п р е д е л и т ь в з а и м н о е р а с п о л о ж е н и е многоугольников, следует проверить в з а и м - Рис. 20 26
ное р а с п о л о ж е н и е сторон многоугольников. Если д в е сто­ роны разных многоугольников пересекаются, то и много­ угольники пересекаются. П о э т о м у д л я определения воз­ можного пересечения сторон многоугольников можно вос­ пользоваться алгоритмом (1.4). Если найдется пара сто­ рон из разных многоугольников, которые пересекаются, то взаимное положение многоугольников о п р е д е л е н о . Если оказалось, что в многоугольниках нет в з а и м н о пересекающихся сторон, то переходим ко второму этапу. Второй э т а п . Устанавливаем взаимное р а с п о л о ж е н и е вершины одного из многоугольников и другого многоуголь­ ника. Если оказалось, что вершина одного из многоуголь­ ников л е ж и т внутри д р у г о г о многоугольника, то один из многоугольников л е ж и т внутри другого. Следовательно, взаимное р а с п о л о ж е н и е многоугольников установлено. Пусть д л я к а ж д о г о из многоугольников его вершина л е ж и т вне другого многоугольника. В этом с л у ч а е оста­ ется единственно в о з м о ж н о е решение: к а ж д ы й много­ угольник л е ж и т вне другого. Вопросы д л я повторения 1. Как о п р е д е л и т ь в з а и м н о е р а с п о л о ж е н и е м н о г о у г о л ь н и к а и точки? 2. З а в и с и т ли с п о с о б о п р е д е л е н и я в з а и м н о г о р а с п о л о ж е н и я многоугольника и точки от выпуклости многоугольника? 3. Н а з о в и т е в о з м о ж н ы е р а с п о л о ж е н и я д в у х т р е у г о л ь н и к о в . ЗАДАЧИ ДЛЯ ПОВТОРЕНИЯ 1. Д а н ы три числа а, Ь, с. Определить, существует ли треугольник с такими д л и н а м и сторон. 2. Д а н ы четыре числа а, Ь, с, d. Определить, суще­ ствует ли четырехугольник с такими длинами сторон. 3 . Найти взаимное р а с п о л о ж е н и е окружности р а д и у ­ са R с центром в точке (х ; у ) и точки А с координатами (xi; Uil 4. Найти взаимное р а с п о л о ж е н и е двух о к р у ж н о с т е й 0 0 27
р а д и у с а R и R с ц е н т р а м и в т о ч к а х (х ; у ) и (х , у) соответственно. 5. Н а й т и в з а и м н о е р а с п о л о ж е н и е о к р у ж н о с т и р а д и у ­ са R с ц е н т р о м в т о ч к е (х ; у ) и п р я м о й , п р о х о д я щ е й ч е р е з точки с к о о р д и н а т а м и (х ; у ) и (х ; у ). 6. О п р е д е л и т ь к о л и ч е с т в о т о ч е к с ц е л о ч и с л е н н ы м и координатами, л е ж а щ и х внутри окружности радиуса R с ц е н т р о м в т о ч к е ( j c ; у ). 7. Н а й т и к о о р д и н а т ы т о ч е к п е р е с е ч е н и я д в у х о к р у ж ­ ностей р а д и у с о в R и R с ц е н т р а м и в т о ч к а х (х ; у ) и (х ; у ) соответственно. 8. Н а й т и к о о р д и н а т ы т о ч к и , с и м м е т р и ч н о й д а н н о й т о ч к е М с к о о р д и н а т а м и (х ; у ) о т н о с и т е л ь н о п р я м о й Ах + Ву + С = 0. 9. Д а н ы д в е т о ч к и М (х ; у ), М (х ; у) и прямая Ах-\-Ву-\-С = 0. Н а й т и на этой п р я м о й т а к у ю точку М ( о> Уо)> чтобы с у м м а р н о е р а с с т о я н и е от нее до д в у х данных точек было минимально. 10. Д а н ы т р и точки с к о о р д и н а т а м и (х ; у ), (х ; у )> (х , г/ ), к о т о р ы е я в л я ю т с я в е р ш и н а м и н е к о т о р о г о п р я м о ­ угольника. Найти координаты четвертой вершины. 11. Д а н ы координаты вершин четырехугольника (х \ у ), {х ; у ), (х ; у ), (х ; у ). О п р е д е л и т ь , в ы п у к л ы й ли четырехугольник. 12. Д а н ы координаты вершин четырехугольника (х ; у ), (х , у ), (х ; у ), (х ; у ). О п р е д е л и т ь , я в л я е т с я л и ч е т ы р е х у г о л ь н и к : а ) р о м б о м ; б ) к в а д р а т о м ; в) т р а п е ц и е й . 13. Д а н ы к о о р д и н а т ы д в у х в е р ш и н (х ;,у ) и (х ; у) некоторого к в а д р а т а . Найти в о з м о ж н ы е координаты дру­ гих его в е р ш и н . 14. Д а н ы к о о р д и н а т ы д в у х в е р ш и н (х ; у ) и (х ; у) н е к о т о р о г о к в а д р а т а , р а с п о л о ж е н н ы х по д и а г о н а л и , и т о ч к а {х \ у ). О п р е д е л и т ь , л е ж и т л и т о ч к а в н у т р и квадрата. 15. Д а н ы к о о р д и н а т ы (х ; у ), (х ; у ), (х ; у ) в е р ш и н т р е у г о л ь н и к а . Н а й т и к о о р д и н а т ы точки п е р е с е ч е н и я его медиан. x 2 х 0 0 x 2 2 0 х 2 х х 2 2 0 2 х х 2 х х х х х 2 2 2 х 0 х 3 х х х 2 х х 2 2 3 2 3 3 4 2 3 4 4 4 х х х 3 х 3 х 28 2 3 х 2 2 3 3 2 2 2 2
16. Д а н ы к о о р д и н а т ы (х ; у ), (х \ у ), (х ; ) в е р ш и н т р е у г о л ь н и к а . Н а й т и д л и н ы его в ы с о т . 17. О п р е д е л и т ь к о э ф ф и ц и е н т ы у р а в н е н и я п р я м о й , п а ­ раллельной данной прямой, определяемой уравнением Ах-\-Ву-\-С — 0 и проходящей через точку с координата­ ми (лу, г/ ). 18. О п р е д е л и т ь к о э ф ф и ц и е н т ы у р а в н е н и я п р я м о й , перпендикулярной данной прямой, определяемой уравне­ нием Ах-\-Ву-\-С — 0 и проходящей через точку с коор­ д и н а т а м и (д: ; у ). { х 2 2 3 Уг 0 0 0 ЗАДАЧИ ПОВЫШЕННОЙ СЛОЖНОСТИ 1. О п р е д е л и т ь , п е р е с е к а ю т с я л и п р я м а я y = kx-\-h и о т р е з о к с к о н ц а м и (*,; «/,), (х , у ). 2. О п р е д е л и т ь , п р и н а д л е ж и т л и т о ч к а А (х; у) о т р е з к у с к о н ц е в ы м и т о ч к а м и В{х{, у ) и С(х ; у ). 3. а) В ы п у к л ы й многоугольник з а д а е т с я координата­ м и своих в е р ш и н п р и его о б х о д е по ч а с о в о й и л и п р о т и в ч а с о в о й с т р е л к и . К о н т у р м н о г о у г о л ь н и к а не и м е е т с а м о ­ пересечений. Определить н а п р а в л е н и е обхода. 2 х 2 2 2 б) Определить н а п р а в л е н и е обхода в случае невы­ пуклого многоугольника. 4. Н а п л о с к о с т и з а д а н ы п о т р е з к о в к о о р д и н а т а м и к о н ц е в ы х точек. К о н ц ы о т р е з к о в з а д а ю т с я д в у м я п а р а м и к о о р д и н а т (jC[ [t]; УуЩ), (x [i\, y [i]), 1 < л ^ л ( к о н ц ы п р и ­ н а д л е ж а т отрезку). Найти прямую, имеющую общие точки с м а к с и м а л ь н ы м числом отрезков, и н а п е ч а т а т ь в п о р я д к е в о з р а с т а н и я н о м е р а тех о т р е з к о в , к о т о р ы е э т а прямая пересекает. 2 2 5. N т о ч е к на п л о с к о с т и з а д а н ы с в о и м и к о о р д и н а т а ­ м и . Н а й т и т а к о й м и н и м а л ь н ы й по п л о щ а д и в ы п у к л ы й м н о г о у г о л ь н и к , что все N т о ч е к л е ж а т л и б о в н у т р и э т о г о м н о г о у г о л ь н и к а , л и б о на его г р а н и ц е ( т а к о й в ы п у к л ы й многоугольник называется выпуклой оболочкой). 6. Н а п л о с к о с т и з а д а н ы с в о и м и к о о р д и н а т а м и k то­ чек. О п р е д е л и т ь , м о ж н о л и п о с т р о и т ь т а к о й в ы п у к л ы й 29
м н о г о у г о л ь н и к , что к а ж д а я т о ч к а п р и н а д л е ж и т некото­ рой с т о р о н е . 7. N т о ч е к на п л о с к о с т и з а д а н ы с в о и м и к о о р д и н а т а ­ ми. Н а й т и п о р я д о к , в к о т о р о м м о ж н о с о е д и н и т ь эти точки, чтобы получился N-угольник. 8. П р е д с т а в ь т е с е б е , что в т е т р а д к е В ы з а к р а с и л и на листе какое-то количество клеточек и получили кле­ т о ч н у ю ф и г у р у . С к о л ь к о осей с и м м е т р и и и м е е т з а д а н н а я клеточная фигура? З а д а н ы : N —размер ф и г у р ы по в е р т и к а л и , N/ — р а з м е р ф и г у р ы по г о р и з о н т а л и ( Л ^ < 1 0 1 ; N - < 8 1 ) и с а м а ф и г у р а в в и д е N с т р о к из п р о б е л о в и з в е з д о ч е к по N/ символов в каждой строке. Звездочка соответствует закрашенной клеточке. П р и м е р 1. 2 4 ( р а з м е р ф и г у р ы по в е р т и к а л и и г о р и з о н т а л и ) ( ; { * * * * Ф и г у р а и м е е т 1 ось с и м м е т р и и . П р и м е р 2. 3 5 ( р а з м е р ф и г у р ы по в е р т и к а л и и горизонтали) * * * * * * Ф и г у р а и м е е т 0 осей с и м м е т р и и . 9. П р я м о у г о л ь н и к ABCD з а д а н к о о р д и н а т а м и своих в е р ш и н . Н а п р о т и в о п о л о ж н ы х с т о р о н а х АВ и CD з а д а н ы п о с л е д о в а т е л ь н о с т и R и R т N т о ч е к р а з б и е н и я , а на с т о р о н а х ВС и AD — R и R из М т о ч е к р а з б и е н и я . Н у м е р а ц и я э л е м е н т о в п о с л е д о в а т е л ь н о с т е й /?, и R н а ч и ­ н а е т с я с о о т в е т с т в е н н о от т о ч е к А и D, a R и R — от В и Л. Соединив отрезками точки с одинаковыми номера­ ми в р а з б и е н и я х /?, и R , а з а т е м в р а з б и е н и я х R и R , п о л у ч и м р а з б и е н и е Q п р я м о у г о л ь н и к а ABCD на мно­ жество четырехугольников. { 2 3 t 2 3 2 4 3 A Найти четырехугольник разбиения Q с наибольшей п л о щ а д ь ю при у с л о в и и , что о т р е з к и , с о е д и н я ю щ и е точки 30
р а з б и е н и й /?, и R параллельны стороне AD. П о с л е д о ­ вательности R R , R3 и R з а д а ю т с я как массивы из длин отрезков разбиения соответствующих сторон пря­ моугольника. 10. Н а прямой з а д а н о N точек с координатами х х, х . Найти такую точку Z, с у м м а расстояний от кото­ рой д о данных точек минимальна. 2 u 2 4 ь 2 ы 11. Пусть через административный район проходит по прямой ж е л е з н а я д о р о г а . Н а ней надо построить с т а н ц и ю так, чтобы расстояние от нее д о самой д а л ь н е й д е р е в н и было бы минимальным. Н а п и с а т ь п р о г р а м м у . 12. Н а плоскости з а д а н о N точек с координатами (*,; у ), (х ; у ), .... (х ; у ). Н а п и с а т ь п р о г р а м м у , которая из этих точек выделяет вершины к в а д р а т а , с о д е р ж а щ е г о максимальное число з а д а н н ы х точек. ( П р е д п о л а г а е т с я , что точки, р а с п о л о ж е н н ы е на сторонах квадрата, при­ н а д л е ж а т ему.) 13. На плоскости з а д а н о множество из N прямоуголь­ ников, стороны которых параллельны осям координат, при этом к а ж д ы й прямоугольник з а д а е т с я координатами левой нижней и правой верхней его вершин. Составить алгоритм определения наибольшего натурального числа К, для которого существует точка плоскости, п р и н а д л е ж а ­ щая одновременно К прямоугольникам. х 2 2 п а П р и м е ч а н и е . Эффективным считается алгоритм, число дей­ ствий которого пропорционально Л/ . 2 14. На квадратном торте N свечей. М о ж н о ли одним прямолинейным р а з р е з о м разделить его на две равные по п л о щ а д и части, одна из которых не с о д е р ж а л а бы ни одной свечи? Свечи б у д е м считать точками, у которых известны их целочисленные координаты у ), (x ; y ). Н а ч а л о координат — в центре торта. Р а з р е з не м о ж е т проходить через свечу. 15. Д а н ы A f ( J V > l ) прямоугольников, для которых п р е д п о л а г а е т с я , что: а ) стороны любого прямоугольника параллельны кох N N 31
B X, 2 B« в* P _s_ Q R - c 2 Ж с, Рис. 21 ординатным осям и прямоугольник задается концами одной из д и а г о н а л е й ; б) к а ж д ы й прямоугольник имеет общие внутренние точки с хотя б ы о д н и м из о с т а л ь н ы х и не и м е е т о б щ и х в е р ш и н , с т о р о н или ч а с т е й сторон ни с о д н и м из о с т а л ь ­ ных п р я м о у г о л ь н и к о в . Составить программу, которая даст возможность: 1) О п р е д е л и т ь в н е ш н и й к о н т у р ф и г у р ы F, я в л я ю щ е й ­ с я о б ъ е д и н е н и е м п р я м о у г о л ь н и к о в ( р и с . 21). 2) О п р е д е л и т ь , с о д е р ж и т л и ф и г у р а F « д ы р к и » , т. е. з а м к н у т ы е ф и г у р ы , к о т о р ы е ей не п р и н а д л е ж а т . 3) Р а з л о ж и т ь ф и г у р у F на н а и м е н ь ш е е в о з м о ж н о е ч и с л о н е п е р е с е к а ю щ и х с я п р я м о у г о л ь н и к о в , к о т о р ы е мо­ гут и м е т ь о б щ и е с т о р о н ы или ч а с т и сторон, а их о б ъ е д и ­ нение д а е т ф и г у р у F. 4) В ы ч и с л и т ь п е р и м е т р и п л о щ а д ь ф и г у р ы F. Внешний контур объединения пря*моугольников AfifiiD,, 2, 3 , 4, е с т ь ADCXX DC B X B XB; фигура F содержит единственную «дырку» PQRS. l l l i 3 i 4 4 2 2 l l П р и м е ч а н и е . Задачи 3) и 4) решаются только для фигур, не содержащих «дырок». 16. Очертание города. Н е о б х о д и м о н а п и с а т ь п р о ­ грамму, которая д о л ж н а помочь архитектору в рисова­ нии о ч е р т а н и я г о р о д а . Г о р о д з а д а е т с я р а с п о л о ж е н и е м з д а н и й и р а с с м а т р и в а е т с я к а к д в у м е р н ы й ; все з д а н и я 32
О 5 / 0 / 5 20 25 30 Рис. 22 в нем — п р я м о у г о л ь н и к и , о с н о в а н и я к о т о р ы х л е ж а т на о д н о й п р я м о й ( г о р о д п о с т р о е н на р а в н и н е ) . З д а н и я з а д а ­ ю т с я т р о й к о й чисел (L„ H /?,), где L, и R — к о о р д и н а т ы л е в о й и п р а в о й стен з д а н и я i, а Н, — в ы с о т а э т о г о з д а ­ н и я . Н а р и с у н к е 22 з д а н и я о п и с ы в а ю т с я т р о й к а м и ( 0 , 1 1 , 5), ( 2 , 6, 7), ( 3 , 13, 10), (12, 7, 16), (14, 3, 25), ( 2 0 , 18, 22), ( 2 3 , 13, 30), (24, 4, 29), а к о н т у р , п о к а з а н н ы й на р и с у н к е 2 3 , з а д а е т с я п о с л е д о в а т е л ь н о с т ь ю ( 1 , 11, 2, 13, 10, 0, 12, 7, 16, 3, 20, 18, 22, 3 , 2 3 , 13, 30, 0) (о с п о с о б е ф о р м и р о в а ­ н и я этой п о с л е д о в а т е л ь н о с т и с м . н и ж е ) . h 0 5 /0 t /5 20 25 30 Рис. 23 2 Информатика, 8—9 кл. 33
В в о д п р е д с т а в л я е т собой п о с л е д о в а т е л ь н о с т ь т р о е к , з а д а ю щ и х дома. Все координаты есть ц е л ы е числа мень­ ше 10 000. Во в х о д н о м ф а й л е м и н и м у м о д н о и м а к с и м у м 50 з д а н и й . К а ж д а я т р о й к а , о б о з н а ч а ю щ а я з д а н и е , н а х о ­ д и т с я в о т д е л ь н о й с т р о к е во в х о д н о м ф а й л е . Все ц е л ы е числа в тройке р а з д е л е н ы одним или несколькими пробе­ л а м и . Т р о й к и о т с о р т и р о в а н ы по т. е. по л е в о й х­коор­ динате здания, таким образом, здание с самой малень­ кой л е в о й х ­ к о о р д и н а т о й я в л я е т с я п е р в ы м во входном файле. В ы в о д б у д е т с о с т о я т ь из в е к т о р а , о п и с ы в а ю щ е г о очертание, как показано в примере выше. В векторе о ч е р т а н и е (v v, v, v_, £>„_„ v ), v о з н а ч а е т г о р и з о н т а л ь н у ю л и н и ю ( в ы с о т у ) , к о г д а i — четное ч и с л о , и вертикальную линию (х­координату), когда i—нечет­ ное. В е к т о р о ч е р т а н и я б у д е т о п р е д е л я т ь маршрут, пройденный, к примеру, ж у к о м , н а ч а в ш и м с мини­ м а л ь н о й х ­ к о о р д и н а т ы и п у т е ш е с т в у ю щ и м по всем в е р ­ тикальным и горизонтальным линиям, определяющим контур. Последний элемент в векторе линии контура б у д е т 0. b 2 3 n 2 n t 17. Н и ж н я я л е в а я и в е р х н я я п р а в а я в е р ш и н ы п р я м о ­ у г о л ь н и к а А и м е ю т к о о р д и н а т ы (0; 0) и (V; W) с о о т в е т с т ­ венно. М н о ж е с т в о S из N т о ч е к з а д а е т с я п а р а м и к о о р д и ­ н а т {х{, y ), 1 < л < [ Л Л Н а й т и т а к о й п р я м о у г о л ь н и к G м а к ­ с и м а л ь н о й п л о щ а д и , что его с т о р о н ы параллельны с т о р о н а м A, G п о л н о с т ь ю л е ж и т в A ( G и А м о г у т и м е т ь о б щ и е г р а н и ч н ы е т о ч к и ) и ни о д н а т о ч к а из S не л е ж и т в н у т р и G (но м о ж е т л е ж а т ь на его с т о р о н е ) . Н а п е ч а т а т ь в е л и ч и н у п л о щ а д и G и к о о р д и н а т ы н и ж н е й л е в о й и верх­ ней п р а в о й в е р ш и н этого п р я м о у г о л ь н и к а . Е с л и т а к и х п р я м о у г о л ь н и к о в н е с к о л ь к о , то в ы в е с т и и н ф о р м а ц и ю по каждому. t П р и м е ч а н и е . Во множестве S никакие две точки не лежат на одной прямой, параллельной стороне А. 34
18. В п е р в о м к в а д р а т е к о ­ о р д и н а т н о й с и с т е м ы Оху н а р и ­ с о в а н п е р в ы й к в а д р а т — ABCD, д л и н а стороны которого р а в н а 1 и вершина А находится в начале координат. Потом нарисо­ ваны: второй к в а д р а т BEFC, т р е т и й — DFGH, четвертый — JAHI, п я т ы й — KLEJ и т а к д а ­ л е е по с п и р а л и ( р и с . 24). Н а п и ­ сать программу, которая для в в е д е н н ы х ц е л ы х чисел х и у / н с о с F Е о X Рис. 24 определяет и выводит номер к в а д р а т а , которому принадле­ ж и т т о ч к а Р(х; у). Е с л и т о ч к а Р л е ж и т на с т о р о н а х к в а д р а т о в и л и в в е р ш и н а х , то б у д е м с ч и т а т ь , что она п р и н а д л е ж и т к в а д р а т у с н а и м е н ь ш и м н о м е р о м из воз­ можных. X 2 результат У 2 1 - 1 4 0 10 13 2 19. Н а п л о с к о с т и з а д а н ы с в о и м и к о о р д и н а т а м и N р а з л и ч н ы х точек. Н а й т и уравнение прямой, д е л я щ е й это м н о ж е с т в о т о ч е к на д в а п о д м н о ж е с т в а с о д и н а к о в ы м количеством элементов. 20. Н а й т и пересечение и объединение двух в ы п у к л ы х многоугольников. Многоугольники задаются координата­ ми в е р ш и н в п о р я д к е о б х о д а по к о н т у р у . 2 1 . Я - у г о л ь н и к на п л о с к о с т и з а д а е т с я к о о р д и н а т а м и в е р ш и н в п о р я д к е их о б х о д а по к о н т у р у . Д л я т о ч к и Z(x; у) н а й т и м и н и м а л ь н о е р а с с т о я н и е д о к о н т у р а iV-угольника. 22. Н а п л о с к о с т и с в о и м и к о о р д и н а т а м и з а д а ю т с я N точек. М а т р и ц а C[l..N, I..N] з а д а е т с я с л е д у ю щ и м о б р а ­ з о м : Сц = Cji = 1 в с л у ч а е , если в е р ш и н ы i и / с о е д и н е н ы 35
о т р е з к о м , и 0, е с л и не с о е д и н е н ы . И з в е с т н о , что л ю б а я в е р ш и н а с о е д и н е н а , по к р а й н е й м е р е , с д в у м я д р у г и м и и что о т р е з к и п е р е с е к а ю т с я т о л ь к о в к о н ц е в ы х т о ч к а х . Т а к и м о б р а з о м , в с я п л о с к о с т ь р а з б и в а е т с я на м н о ж е с т в о м н о г о у г о л ь н и к о в . З а д а н а т о ч к а Z (х; у). Н а й т и мини­ м а л ь н ы й по п л о щ а д и м н о г о у г о л ь н и к , с о д е р ж а щ и й Z, или в ы д а т ь с о о б щ е н и е , ч т о т а к о г о н е с у щ е с т в у е т . Е с л и Z п р и н а д л е ж и т к а к о м у - т о о т р е з к у , то в ы д а т ь его концевые точки; если Z л е ж и т в многоугольнике, то выдать его вершины в порядке обхода по кон­ туру. 23. Б у д е м н а з ы в а т ь д в а м н о г о у г о л ь н и к а п о д о б н ы ­ ми, е с л и с у щ е с т в у е т в з а и м н о о д н о з н а ч н о е о т о б р а ж е н и е сторон этих двух фигур такое, что соответствующие стороны пропорциональны с коэффициентом пропорци­ о н а л ь н о с т и k, а у г л ы , о б р а з о в а н н ы е д в у м я с о о т в е т с т в у ­ ющими сторонами, равны. Определить, подобны ли два м н о г о у г о л ь н и к а . М н о г о у г о л ь н и к и з а д а ю т с я на п л о с к о ­ сти к о о р д и н а т а м и в е р ш и н к о н т у р о в . В е р ш и н ы в кон­ т у р е п е р е ч и с л я ю т с я в п о р я д к е о б х о д а п р о т и в часовой стрелки. Примечание. Так как все вычисления на ЭВМ прово­ дятся с ограниченной точностью, то считать, что две величины равны, если они совпадают с точностью до двух знаков после з а ­ пятой. 24. З а д а н ы н а т у р а л ь н о е ч и с л о N и д в е п о с л е д о в а ­ тельности целых чисел (а,, а , a ) и (Ь , Ъ b ). З а д а н ы т а к ж е д в а ч и с л а х и х,, лг <Сх . 2 N й а) Найти — t <Cti-<.... {tj-i, t/], 1 ^ / l^i^N, и венство 0 х 0 ъ N 1 числа t , t , p^N, т а к и е , что х = <Ct = x и указать д л я каждого отрезка ^ р , т а к о е ч и с л о k, l^.k^.N, ч т о д л я всех i, д л я в с е х х из /,] с п р а в е д л и в о н е р а ­ a -x-\-b ^a -x-\-b . 0 p p 0 u k k б) i i Найти числа s , s s , т а к и е , что х — s <s <... <.s — x и указать д л я каждого отрезка [ s , _ i ; Sj], 1 ^ / ^ Q , т а к у ю п е р е с т а н о в к у (/,, i , i ) чисел Q x 0 Q iy Q 0 lt 2 N
1, 2, 3, N, что д л я всех х из [s -_,; s ] с п р а в е д л и в о н е р а ­ ; венство а.,-х + Ь. гСа,- ; + ; <Са, -x-i-b.и всех о т р е з к о в с о о т в е т с т в у ю щ и е п е р е с т а н о в к и 25. В правильном для ; /г-угольнике различны. провели несколько д и а г о н а л е й , п р и ч е м н и к а к и е т р и не п е р е с е к а ю т с я в од­ ной точке. На сколько частей диагонали разбили я - у г о л ь н и к ? Д и а г о н а л и з а д а н ы н о м е р а м и в е р ш и н «-уголь­ н и к а , к о т о р ы е они с о е д и н я ю т , все в е р ш и н ы п е р е н у м е р о ­ в а н ы по п о р я д к у ч и с л а м и 1, 26. Круг разрезан п. самонепересекающейся к о о р д и н а т ы в е р ш и н которой з а д а н ы п а р а м и ных чисел (х ; у ), { ломаной, натураль­ (х ; у ). П е р в а я и п о с л е д н я я в е р ш и ­ { к к ны л е ж а т на г р а н и ц е к р у г а , а о с т а л ь н ы е — в н у т р и него. О п р е д е л и т ь , м о ж н о ли р а з ъ е д и н и т ь д в е ч а с т и к р у г а ( в ы х о д из п л о с к о с т и мых частей 27. Н а не получившиеся и повороты разнимае­ допускаются). местности, представляющей собой идеально р о в н у ю п о в е р х н о с т ь , стоит в ы с о к и й з а б о р . П л а н ра — з а м к н у т а я л о м а н а я без самопересечений, забо­ которая з а д а е т с я N п а р а м и к о о р д и н а т своих в е р ш и н в п о р я д к е обхода ограничиваемой вой с т р е л к и . N<ClOO. Вершины забором области против пронумерованы от В т о ч к е (х; у) с т о и т ч е л о в е к ((г, 1 часо­ до N, у) не м о ж е т л е ж а т ь на л о м а н о й ) . С ч и т а я , чго к а ж д о м у з в е н у Ломаной ставится в соответствие пара номеров концевых шин, указать, какие звенья человек увидит вер­ полностью или ч а с т и ч н о , а к а к и е — в о о б щ е не у в и д и т . Е с л и при в з г л я д е з в е н о в и д н о к а к т о ч к а или к а к п а р а т о ч е к , то п о л а г а е м , что оно не в и д н о . 28. На гранях двух равных правильных ров N и М написаны числа N N, М , М . тетраэдры бы на b 3 4 Можно ли совпадающих совместить гранях 2 N, 3 оказались N 4 тетраэд­ и M u М, так, что­ 2 одинаковые числа? 37
ЗАДАЧИ ДЛЯ САМОСТОЯТЕЛЬНОГО РЕШЕНИЯ 1. З а д а н ы с т о р о н ы А и В д в у х к в а д р а т о в , р а с п о л о ­ ж е н н ы х т а к , к а к п о к а з а н о на р и с у н к е 25 ( в е р т и к а л ь н ы е оси с и м м е т р и и у к в а д р а т о в с о в п а д а ю т ) . О п р е д е л и т ь угол а, под к о т о р ы м ш а р и к н а д о в ы п у с т и т ь из точки А, ч т о б ы он п о п а л в т о ч к у В з а м и н и м а л ь н о е к о л и ч е с т в о о т р а ­ жений. 2. Д в а Л/'-угольника на п л о с к о с т и з а д а ю т с я к о о р д и ­ н а т а м и в е р ш и н в п о р я д к е их о б х о д а по к о н т у р а м . Н а й т и м и н и м а л ь н о е р а с с т о я н и е м е ж д у э т и м и А/-угольниками. 3 . N т о ч е к на п л о с к о с т и з а д а н ы с в о и м и к о о р д и н а т а ­ ми. Н а й т и п о р я д о к , в к о т о р о м м о ж н о с о е д и н и т ь эти точки, чтобы получилась л о м а н а я без самопересечений. 4. Н а п л о с к о с т и з а д а н о N т о ч е к с к о о р д и н а т а м и (хй */,)> (х ; у ), (х ; у ). Н а й т и т а к у ю т о ч к у Z(х; у), с у м м а расстояний от которой до о с т а л ь н ы х м и н и м а л ь н а и: а ) Z — о д н а из з а д а н н ы х точек; б) Z — п р о и з в о л ь н а я т о ч к а п л о с к о с т и . 5. Н а п л о с к о с т и з а д а н о м н о ж е с т в о т о ч е к А и мно­ ж е с т в о п р я м ы х В. Н а й т и д в е т а к и е р а з л и ч н ы е точки из А, что п р о х о д я щ а я ч е р е з них п р я м а я п а р а л л е л ь н а н а и ­ б о л ь ш е м у к о л и ч е с т в у п р я м ы х из В. 6. С р е д и т р е у г о л ь н и к о в с в е р ш и н а м и в з а д а н н о м м н о ж е с т в е точек на п л о с к о с т и у к а з а т ь т а к о й , с т о р о н ы которого с о д е р ж а т м а к с и м а л ь н о е число точек заданного множества. 7. В с е с т е н ы д о м а и м е ю т д л и ­ ну 5 м. С е в е р н а я и ю ж н а я с т о р о ­ н ы — б е л ы е , з а п а д н а я и восточ­ н а я — с и н и е . Ч е л о в е к .прошел от ю г о - в о с т о ч н о г о у г л а д о м а А мет­ р о в на юг, В м е т р о в на восток и С м е т р о в на с е в е р и посмот­ О b р е л на д о м . Н а п и с а т ь а л г о р и т м , который определяет, к а к и е стены увидит человек. 8. Н а с т о л е л е ж и т и г р а л ь н ы й А В кубик гранью А к нам, гранью Рис. 25 В вверх. Н а п и с а т ь программу, 2 2 п п 0 0 38
определяющую последовательность «кантования» кубика ( « н а н а с » , «от н а с » , « в п р а в о » , « в л е в о » ) , п о с л е в ы п о л н е ­ н и я к о т о р ы х к у б и к о к а ж е т с я на п р е ж н е м м е с т е , но к н а м гранью А , вверх — В . к к П р и м е ч а н и е . Под кантованием понимается перекатывание кубика через соприкасающееся со столом ребро без скольжения. Другие способы перемещения кубика запрещены. Нумерация граней кубика такова, что если его положить на грань с цифрой 5, то боковые грани будут иметь номера 1, 6, 4, 3 при обходе по часовой стрелке, а верхняя — номер 2. 9. Н а п л о с к о с т и з а д а н ы к о о р д и н а т ы в е р ш и н д в у х т р е у г о л ь н и к о в . Т р е б у е т с я н а й т и х о т я б ы одну п р я м у ю , р а з б и в а ю щ у ю к а ж д ы й из э т и х т р е у г о л ь н и к о в на д в е р а в н о в е л и к и е ч а с т и . Р е з у л ь т а т д о л ж е н в ы в о д и т ь с я на э к р а н в в и д е у р а в н е н и я y — kx-\-b. Е с л и и с к о м а я п р я м а я п а р а л л е л ь н а оси Оу, то у р а в н е н и е д о л ж н о б ы т ь п р и в е д е ­ но в в и д е х = А. К о э ф ф и ц и е н т ы Л , В, k д о л ж н ы б ы т ь п р и в е д е н ы не м е н е е чем с ч е т ы р ь м я з н а к а м и п о с л е десятичной точки. 10. Д а н ы ч и с л а (*,; у ), ( х ; у ), (х \ у )— координаты трех каких-то вершин прямоугольника в прямоугольной системе координат. Найти координаты четвертой вер­ шины. у 2 2 3 3 11. Б у д е м о т с ч и т ы в а т ь у г л ы от п о л о ж и т е л ь н о г о н а ­ п р а в л е н и я оси Ох: п о л о ж и т е л ь н ы е — п р о т и в часовой с т р е л к и , о т р и ц а т е л ь н ы е — по ч а с о в о й с т р е л к е . П у с т ь в е л и ч и н а у г л а л е ж и т в п р е д е л а х от — 1 8 0 ° д о 180°. Д а н ы 2 т о ч к и А (*,; у ) и В(х \ у ). О п р е д е л и т ь , к а к о й из о т р е з к о в , OA или ОВ, о б р а з у е т б о л ь ш и й у г о л с осью Ох. { 2 2 12. З а д а е т с я ч и с л о N и т о ч к и п л о с к о с т и (*,; у ), (х , у ), (%; y ), я в л я ю щ и е с я с е р е д и н а м и п о с л е д о в а ­ т е л ь н ы х с т о р о н JV-угольника. В о с с т а н о в и т ь по э т и м точ­ к а м исходный iV-угольник. П о д м н о г о у г о л ь н и к о м в д а н ­ ной з а д а ч е п о н и м а е т с я к а к а я угодно ( в о з м о ж н о с а м о п е ­ ресекающаяся) замкнутая ломаная. х 2 2 N 39
П р и м е ч а н и е . N — нечетное, JV>1 и N < 2 0 , xt, j/ — веще­ ственные числа. Входные данные будут соответствовать приведенным у с л о в и я м , причем многоугольник построить можно. Структура вывода: точка 1: А [1] В [1] точка 2: А [2] В [2] y точка N: A [N] В [N], где (A [i]; В Щ) — координаты г'-й вершины контура искомого много­ угольника. УКАЗАНИЯ К Р Е Ш Е Н И Ю ЗАДАЧ ПОВЫШЕННОЙ СЛОЖНОСТИ 1. Вариант 1. М о ж н о ч е р е з к о н ц ы о т р е з к а провести п р я м у ю y — cx-\-d и о п р е д е л и т ь , п р и н а д л е ж и т л и т о ч к а п е р е с е ч е н и я д в у х п р я м ы х , если о н а с у щ е с т в у е т , о т р е з к у , т. е. мы д о л ж н ы р е ш и т ь у р а в н е н и е х(с — k) = (b — d), н а й т и y — kx-\-b и проверить выполнение неравенств х ^.х^х , У\^У^у Н о при н а х о ж д е н и и (х; у) в р е з у л ь ­ т а т е д е л е н и я могут в о з н и к н у т ь б о л ь ш и е в ы ч и с л и т е л ь н ы е п о г р е ш н о с т и или д а ж е п е р е п о л н е н и е или п о т е р я з н а ч и ­ мости, в р е з у л ь т а т е чего п о л у ч и т с я н е в е р н ы й ответ. Вариант 2. О б о з н а ч и м F(х\ y) = kx-\-b — y. П р я м а я kx-\-b — y р а з б и в а е т п л о с к о с т ь на т р и ч а с т и : в одной F (х; у)>0, в д р у г о й F (х\ г / ) < 0 , и на п р я м о й kx-\-b — y в ы п о л н я е т с я F (ж; у) = 0. Е с л и п р я м а я y = kx-\-b пересе­ к а е т о т р е з о к , то л и б о к о н ц ы о т р е з к а л е ж а т в р а з л и ч н ы х п о л у п л о с к о с т я х , л и б о хотя б ы о д н а к о н ц е в а я т о ч к а от­ р е з к а л е ж и т на п р я м о й . Э т о р а в н о с и л ь н о в ы п о л н е н и ю н е р а в е н с т в а F(x ; y )F(x , у )^.0. Т а к и м о б р а з о м , не в ы ч и с л я я т о ч к у п е р е с е ч е н и я , м ы по з н а к у п р о и з в е д е н и я можем определить, имеют ли п р я м а я и отрезок общую точку. О ч е в и д н о , что второй в а р и а н т р е ш е н и я з а д а ч и предпочтительнее первого. 1 2 2 { { 2 2 2. Точки о т р е з к а Z м о ж н о о п и с а т ь у р а в н е н и е м p-OB + (l-p)OC где р — ч и с л о ( O ^ p ^ l ) , OB 40 = z, и ОС — в е к т о р ы . (*)
Е с л и с у щ е с т в у е т т а к о е ч и с л о р ( O ^ p ^ l ) , что р • OB-f-( 1 — р)-ОС — А, т о А, л е ж и т на о т р е з к е , и н а ч е — нет. Р а в е н с т в о (*) р а с п и с ы в а е т с я п о к о о р д и н а т н о т а к : рх + (1—р)х ру + (1—р)у 1 2 1 2 = х, = у. И з п е р в о г о у р а в н е н и я н а х о д и м р, п о д с т а в л я е м во второе; е с л и п о л у ч а е м р а в е н с т в о и O ^ p ^ l , то А л е ж и т на о т р е з к е , и н а ч е — нет. 3 . Н а й д е м к а к у ю - н и б у д ь в н у т р е н н ю ю т о ч к у А (х; у) в ы п у к л о г о м н о г о у г о л ь н и к а , н а п р и м е р т о ч к у А (х; у) с к о ­ о р д и н а т а м и ((х + х + х )/3; (у + у + у )/3). Т а к а я точка называется центром масс треугольника с вершина­ ми в этих т р е х т о ч к а х . Н а к о н т у р е в ы б е р е м п р о и з в о л ь н о две последовательные вершины Ь и L и вычислим углы, к о т о р ы е о б р а з у ю т о т р е з к и (A; L ) и (A; L ) с осью Ох. Е с л и п е р в ы й у г о л м е н ь ш е в т о р о г о , т о обход п р о т и в ч а с о в о й с т р е л к и , и н а ч е — по ч а с о в о й . 1 2 3 х 2 л х 2 x 2 М о ж н о р е ш а т ь з а д а ч у и другим способом, который применим и в случае невыпуклой фигуры. В н а ч а л е най­ д е м н о м е р в е р ш и н ы , и м е ю щ е й м и н и м а л ь н у ю г/-координату ( п у с т ь ее к о о р д и н а т ы (х ; у )). Е с л и т а к и х точек н е с к о л ь к о , т о б е р е м ту, у к о т о р о й х - к о о р д и н а т а мини­ м а л ь н а (т. е. с а м у ю л е в у ю ) . П о с л е этого мы з н а е м к о о р ­ д и н а т ы д в у х точек, о д н а из к о т о р ы х п р е д ш е с т в у е т в з а ­ д а н н о м обходе найденной точке, а д р у г а я — следует за ней. П у с т ь их к о о р д и н а т ы (х ; у ) и (x ; y ) с о о т в е т с т в е н ­ но. Е с л и 0 р Ур Л1( -*0? х Р тю р s У* ^min + (Ур-У т? т s ^min Л1( *-Х ? + (У*-Утт? х 0 ' то о б х о д по ч а с о в о й с т р е л к е , и н а ч е — п р о т и в ( з н а ч е н и я дробей соответствуют косинусам углов, которые образу­ ют с о о т в е т с т в у ю щ и е с т о р о н ы м н о г о у г о л ь н и к а с п р я м о й , о п р е д е л я е м о й у р а в н е н и е м y = y „. А т а к к а к э т о т угол mi 41
л е ж и т в п р е д е л а х от 0° д о 180°, то м е н ь ш е м у у г л у со­ ответствует большее значение косинуса). 4. П р е д п о л о ж и м , мы н а ш л и т а к у ю п р я м у ю . Б у д е м с д в и г а т ь ее в н а п р а в л е н и и , п е р п е н д и к у л я р н о м этой п р я ­ мой ( п а р а л л е л ь н ы й п е р е н о с ) до тех п о р , пока она не п е р е с е ч е т к а к у ю - н и б у д ь из к о н ц е в ы х т о ч е к о т р е з к а . З а счет п о в о р о т а п р я м о й в о к р у г этой т о ч к и м ы м о ж е м д о б и т ь с я того, что п р я м а я б у д е т п р о х о д и т ь ч е р е з 2 кон­ ц е в ы е точки о т р е з к о в и не п е р е с т а н е т б ы т ь р е ш е н и е м з а д а ч и . Следовательно, мы д о л ж н ы рассмотреть п р я м ы е , п р о х о д я щ и е ч е р е з в с е в о з м о ж н ы е к о м б и н а ц и и п а р кон­ ц е в ы х т о ч е к о т р е з к о в . В с е г о н а д о п р о в е р и т ь (2N— 1) + + (2iV— 2) + . . . -f- 1 =N(2N— 1) п р я м ы х и д л я к а ж д о й из них н а й т и ч и с л о п е р е с е ч е н и й с о т р е з к а м и . Та п р я м а я , у к о т о р о й это ч и с л о м а к с и м а л ь н о е , и е с т ь и с к о м а я . При решении возникает подзадача пересечения пря­ мой ax-\-by-\-c = 0 и о т р е з к а с к о н ц а м и (*,; г/,), (х ; у ). ( С м . а л г о р и т м 1.3.) 5. С т р о и м в ы п у к л у ю о б о л о ч к у д а н н о г о м н о ж е с т в а точек, т. е. т а к о й в ы п у к л ы й м н о г о у г о л ь н и к , в е р ш и н а м и к о т о р о г о я в л я ю т с я н е к о т о р ы е из э т и х N т о ч е к ( в о з м о ж н о , не в с е ) . Ч е р е з к а к о е б ы р е б р о э т о г о м н о г о у г о л ь н и к а м ы не п р о в е л и п р я м у ю , все N т о ч е к исходного м н о ж е с т в а б у д у т л е ж а т ь по одну с т о р о н у от этой п р я м о й и на ней (определение местоположения точек относительно пря­ мой — с м . а л г о р и т м 1.3). 2 2 И з п р о и з в о л ь н о й т о ч к и а м н о ж е с т в а А из N точек м ы м о ж е м п р о в е с т и не б о л е е (N — 1)-го о т р е з к а т а к , ч т о б ы и в т о р а я к о н ц е в а я т о ч к а этого о т р е з к а б ы л а из м н о ж е ­ с т в а А. Б е р е м тот о т р е з о к [а,; а ] , д л я к о т о р о г о все т о ч к и м н о ж е с т в а А л е ж а т по одну с т о р о н у от п р я м о й , п р о х о д я ­ щ е й ч е р е з этот о т р е з о к ( е с л и ни один о т р е з о к не у д о в л е т ­ в о р я е т э т о м у у с л о в и ю , то б е р е м д р у г о е а,; с с а м о г о н а ч а л а л у ч ш е всего в з я т ь в к а ч е с т в е а т о ч к у с м а к с и ­ м а л ь н о й а б с ц и с с о й , а е с л и т а к и х н е с к о л ь к о , т о с р е д и них б е р е м т о ч к у с м а к с и м а л ь н о й о р д и н а т о й — это г а р а н т и ­ р у е т , что O j п р и н а д л е ж и т и с к о м о м у к о н т у р у в ы п у к л о г о { 2 { 42
м н о г о у г о л ь н и к а ) . Д л я точки а и щ е м т о ч к у а Фа так, ч т о б ы все м н о ж е с т в о А л е ж а л о по одну с т о р о н у от п р я м о й , о п р е д е л я е м о й о т р е з к о м [а ; а ] , д л я точки а, и щ е м т о ч к у а фа _ т а к , ч т о б ы все точки А л е ж а л и по о д н у с т о р о н у от п р я м о й , с о д е р ж а щ е й о т р е з о к [а a ], и т. д., до тех п о р , п о к а о ч е р е д н о й т о ч к о й a не с т а н е т а — мы з а м к н у л и контур и нашли выпуклую оболочку. В с е т о ч к и м н о ж е с т в а Л , не л е ж а щ и е на к о н т у р е , л е ж а т внутри выпуклой оболочки. 6. П р е д п о л о ж и м , что м ы п о с т р о и л и и с к о м ы й в ы п у к ­ л ы й многоугольник. Если к а к а я - т о точка а (из данного в у с л о в и и м н о ж е с т в а S из k т о ч е к ) л е ж и т на с т о р о н е м н о г о у г о л ь н и к а , то с ч и т а е м ее новой в е р ш и н о й этого м н о г о у г о л ь н и к а . М о ж е м с ч и т а т ь , что все в е р ш и н ы д а н ­ ного м н о г о у г о л ь н и к а е с т ь т о ч к и м н о ж е с т в а S ( е с л и это не т а к и м е ж д у д в у м я т о ч к а м и а и b из S л е ж и т о д н а или н е с к о л ь к о « п о с т о р о н н и х » в е р ш и н , то м ы м о ж е м их о т б р о ­ с и т ь и с ч и т а т ь , что а и b — д в е п о с л е д о в а т е л ь н ы е в е р ш и ­ ны к о н т у р а . М н о г о у г о л ь н и к при э т о м у н а с о с т а е т с я в ы п у к л ы м ( о т р е з о к [а; Ь] д е л и т ф и г у р у на д в а в ы п у к л ы х м н о г о у г о л ь н и к а ) , а т а к к а к на к о н т у р е м е ж д у а и b не л е ж а л о ни одной точки из 5 , то п о л у ч е н н ы й м н о г о у г о л ь ­ ник у д о в л е т в о р я е т т р е б о в а н и я м з а д а ч и ) . И т а к , в качестве решения з а д а ч и мы получили вы­ п у к л у ю о б о л о ч к у м н о ж е с т в а S (о п о с т р о е н и и ее с м . з а ­ д а ч у 5). Е с л и п о с т р о е н н а я в ы п у к л а я о б о л о ч к а т а к о в а , что к а ж д а я т о ч к а S я в л я е т с я ее в е р ш и н о й ( и л и л е ж и т на с т о р о н е ) , то з а д а ч а р е ш е н а , и н а ч е — р е ш е н и я не с у щ е ­ ствует. 7. Р а с с м о т р и м д в а из в о з м о ж н ы х а л г о р и т м о в . Вариант 1. С т р о и м в ы п у к л у ю о б о л о ч к у д а н н о г о м н о ­ ж е с т в а т о ч е к (см. з а д а ч у 5). Е с л и все т о ч к и м н о ж е с т в а Л л е ж а т на к о н т у р е , то з а д а ч а р е ш е н а . Е с л и ж е нет, то и щ е м точку р с м и н и ­ м а л ь н ы м р а с с т о я н и е м до к о н т у р а ( е с л и т а к и х т о ч е к н е с к о л ь к о , то б е р е м л ю б у ю из них). П у с т ь м и н и м а л ь н о е р а с с т о я н и е до к о н т у р а е с т ь р а с с т о я н и е д о с т о р о н ы (и; v). 2 3 2 1+1 1 1 3 1 ь i+l i + 1 и : 43
В с т а в л я е м в к о н т у р точку р: в м е с т о к о н т у р а . . . и, v, .... б у д е т к о н т у р ... и, р, v, ... . Д л я оставшихся точек повторяем описанную выше п р о ц е д у р у , п о к а все т о ч к и не б у д у т в с т а в л е н ы в к о н т у р . Р а с с т о я н и е от т о ч к и до с т о р о н ы — это л и б о д л и н а п е р п е н д и к у л я р а , о п у щ е н н о г о из точки на сторону, е с л и п р о е к ц и я т о ч к и п о п а д а е т на о т р е з о к , л и б о м и н и м а л ь н о е из р а с с т о я н и й от т о ч к и д о к о н ц е в ы х т о ч е к с т о р о н ы . Р а с с т о я н и е от точки z(u; v) до ее п р о е к ц и и на п р я м у ю Ах + Ву + С = 0 е с т ь d^\Au +Bv T + C\/'^A +¥. Вариант 2. С т р о и м в ы п у к л у ю о б о л о ч к у V д а н н о г о м н о ж е с т в а точек. Е с л и все точки м н о ж е с т в а А л е ж а т на к о н т у р е , то з а д а ч а решена. И н а ч е , обозначим через А все внутрен­ ние точки в ы п у к л о й о б о л о ч к и V. С т р о и м д л я нового м н о ж е с т в а А в ы п у к л у ю о б о л о ч к у V ( к о н т у р ы V и V не пересекаются!). «Склеиваем» два контура следующим образом. В ы б е р е м по п а р е п о с л е д о в а т е л ь н ы х в е р ш и н р, s и р s, на к о н т у р а х V и V соответственно так, чтобы в ч е т ы р е х у г о л ь н и к е с в е р ш и н а м и s, р, р s, не л е ж а л о б о л ь ш е никаких других точек контуров V и V. Р а з р ы в а ­ ем к о н т у р ы V и V, ( у б и р а я р е б р а ( р ; s) и (р ; s,)) и о б ъ ­ е д и н я е м их ( д о б а в л я я р е б р а ( р ; р , ) и (s; s )). х х x x ь t 1 ( t х x Е с л и в н у т р и V нет в н у т р е н н и х точек, то з а д а ч а решена, иначе — с внутренними точками V проделыва­ ем т е ж е с а м ы е о п е р а ц и и : н а х о д и м в ы п у к л у ю о б о л о ч к у и п а р ы п о с л е д о в а т е л ь н ы х т о ч е к на к о н т у р а х , р а з р ы в а е м и « с к л е и в а е м » к о н т у р ы и т. д., п о к а не п о л у ч и м , что по­ с л е д н я я построенная в ы п у к л а я оболочка содержит в се­ бе 0, 1 и л и 2 т о ч к и . Е с л и т о ч е к 0, то з а д а ч а р е ш е н а . В п р о т и в н о м с л у ч а е присоединяем точки к ранее образованному контуру так, чтобы фигура о с т а л а с ь многоугольником (можно прово­ д и т ь п р и с о е д и н е н и е , к а к и в в а р и а н т е 1). 8. У к л е т о ч н о й ф и г у р ы м о г у т б ы т ь с л е д у ю щ и е оси симметрии — горизонтальная, вертикальная и идущие { x 44
под у г л о м 45° и 135° (т. е. 4 оси с и м м е т р и и , к а к у к в а д ­ р а т а ) . Оси могут проходить к а к через центр какой-то к л е т к и , т а к и по с т о р о н е . Н а п р и м е р , ф и г у р ы и м е ю т по 2 оси с и м м е т р и и — г о р и з о н т а л ь н у ю и в е р т и ­ к а л ь н у ю , а ф и г у р а * — все 4 оси с и м м е т р и и . В в е д е м с и с т е м у к о о р д и н а т т а к и м о б р а з о м , что к а ж ­ д а я з а р и с о в а н н а я к л е т к а п р е д с т а в л я е т с я точкой с ц е л о ­ численными координатами. Находим возможный центр симметрии фигуры, имею­ щий к о о р д и н а т ы ((x „ + x )/2; (у +у )/2), где х , #max> * m i n Утт соответственно м а к с и м а л ь н ы е и мини­ мальные иксовые и игрековые координаты точек в з а д а н ­ ной н а м и с и с т е м е к о о р д и н а т : m mln тах тт тзх и х тах = m a x {х,}, *min = rmn {х,}, Утах Ут'т m a x {у), m i n {г/,}. Е с л и у ф и г у р ы есть ось с и м м е т р и и , то она п р о х о д и т через возможный центр симметрии фигуры. Р а с с м а т р и в а е м 4 в о з м о ж н ы е оси с и м м е т р и и , прохо­ д я щ и е через этот центр. О п р е д е л я е м , является ли фигу­ р а с и м м е т р и ч н о й о т н о с и т е л ь н о к а ж д о й из осей ( д л я удобства этот центр можно считать началом системы координат). П р и симметрии относительно горизонталь­ ной ( в е р т и к а л ь н о й ) оси к а ж д о й к л е т к е ф и г у р ы {х\ у) д о л ж н а соответствовать клетка с такой ж е иксовой ( и г р е к о в о й ) к о о р д и н а т о й , но с о б р а т н о й по з н а к у д р у г о й к о о р д и н а т о й , т. е. (х; —у) ( д л я в е р т и к а л ь н о й оси со­ о т в е т с т в е н н о (— х; у)). П р и с и м м е т р и и о т н о с и т е л ь н о оси с н а к л о н о м 45° (— 45°) к а ж д о й к л е т к е (х; у) ф и г у р ы д о л ж н а с о о т в е т с т в о в а т ь к л е т к а с к о о р д и н а т о й (у; х) (со­ ответственно ( — у , —х)). 9. О т р е з к и , с о е д и н я ю щ и е точки р а з б и е н и й R и R , п а р а л л е л ь н ы с т о р о н е AD. Б у д е м б р а т ь о т р е з к и , с о е д и н я ­ ю щ и е п о с л е д о в а т е л ь н ы е т о ч к и р а з б и е н и й R и R и ис­ кать между этими двумя последовательными отрезками y 3 it 2
с D р четырехугольник с наибольшей площадью. Четырехугольник разбиения Q с максимальной п л о щ а д ь ю есть ч е т ы р е х у г о л ь ­ ник с м а к с и м а л ь н о й п л о щ а д ь ю по всем т а к и м разбиениям прямоугольника отрезками. Пусть последовательные точки разбиения с одинако­ в ы м и н о м е р а м и на с т о р о н а х ВС и AD есть с о о т в е т с т в е н ­ А В Рис. 26 А, но / и g„ g. Если f — f = g — gb то а н а л и з и р у е м ы е четырехугольники есть прямоугольники, и прямоугольник с максимальной площадью определя­ ется м а к с и м а л ь н о й длиной отрезка в разбиении R (или, что то ж е , R ). П у с т ь д л я о п р е д е л е н н о с т и "/2 — /1 > — g"i ( с л у ч а й обратного неравенства рассматривается аналогично). О б о з н а ч и м f — fi — hu ёг — £ 1 = ^ 2 . P = CD, h' и h" — д л и н ы л е в о й и п р а в о й сторон ч е т ы р е х у г о л ь н и к а , L— расстояние м е ж д у д в у м я этими сторонами, Z — точка п е р е с е ч е н и я п р о д о л ж е н и я в е р х н е й и н и ж н е й с т о р о н че­ т ы р е х у г о л ь н и к а : L „ L — с о о т в е т с т в е н н о р а с с т о я н и я от л е в о й и п р а в о й с т е н о к п р я м о у г о л ь н и к а ABCD д о четы­ р е х у г о л ь н и к а , х — р а с с т о я н и е от точки Z д о п р я м о ­ у г о л ь н и к а ABCD, S — п л о щ а д ь ч е т ы р е х у г о л ь н и к а . П о л у ­ чим с л е д у ю щ у ю с х е м у ( р и с . 2 6 ) и р а в е н с т в а : 2 2 2 l 2 { 2 2 2 3 х _ Л х+р. А, ' 2 S = (h' + х h")L /2; 2 x+ L _ 3 h" x+ L +L 2 ~~ 3 h' Откуда x = ph /{h — h ); h' = h (x + L -\-L )/x; h" = h (x + L )/x. 2 2 2 2 2 46 x 3 3
Д л я каждой пары отрезков, определяемых точками разбиений /? и R , находим м а к с и м а л ь н у ю п л о щ а д ь четырехугольника между этими двумя отрезками. 10. П у с т ь к о о р д и н а т ы т о ч е к х x не у б ы в а ю т ( е с л и это не т а к , то п р о с т о о т с о р т и р у е м п р е д в а р и т е л ь н о последовательность). Вариант 1. П р е д п о л о ж и м , что мы н а ш л и т о ч к у Z с ко­ о р д и н а т о й х и она л е ж и т на и н т е р в а л е (х ; x ). Справа от нее i точек, с л е в а — (/V — i). С у м м а р а с с т о я н и й S будет такой: 3 4 ь N 0 ; i+l min Smin = (*o — + + ( * о — + ••• + ( Х ц — *<>) + — х )0 П р е д п о л о ж и м , что i>N— i и мы в пределах интерва­ л а с д в и г а е м т о ч к у Z в л е в о на к а к у ю - т о м а л е н ь к у ю в е л и ч и н у d(d<x — х ). П о л у ч а е м н о в у ю с у м м у S: 0 ; (x — d — xi) + ... -\-(x + (x -(x -d)) 0 0 N 0 — d — x ) + (x — (x — d)) + ... = S — di + d(N-i). i i+l 0 + min А т а к к а к по п р е д п о л о ж е н и ю i>N — г, то S<cS . Ситуация, когда N — исследуется аналогично — д е л а е м с д в и г на в е л и ч и н у d<ix — х в п р а в о , не выхо­ д я при этом за границы интервала, и опять ж е получаем, что н о в а я с у м м а S < S . Случай, когда Z совпадает с о д н о й из т о ч е к х и с с л е д у е т с я т а к ж е , с и с п о л ь з о в а н и ­ ем м а л е н ь к и х с д в и г о в . С л е д о в а т е л ь н о , д л я того ч т с б ы т о ч к а Z б ы л а и с к о ­ мой, н е о б х о д и м о и д о с т а т о ч н о , чтобы с п р а в а и с л е в а от нее л е ж а л о одно и то ж е ч и с л о точек. Е с л и N = 2k, то т о ч к а Z м о ж е т б ы т ь л ю б о й из т о ч е к о т р е з к а [х \ х ], е с л и ж е N — 2k-\-l, то т о ч к а Z и м е е т к о о р д и н а т у х . Вариант 2. П у с т ь мы р е ш а е м з а д а ч у д л я N точек на прямой. Т о ч к а Z д о л ж н а , о ч е в и д н о , л е ж а т ь на о т р е з к е [х^, х ]. Е с л и N=1, то д а н н а я т о ч к а и я в л я е т с я и с к о м о й . Е с л и N = 2, то Z м о ж е т л е ж а т ь г д е у г о д н о на о т р е з к е [х ; x ] — с у м м а р н о е р а с с т о я н и е б у д е т о д и н а к о в ы м и р а в ­ ным длине отрезка. min N+l 0 m i n ь к к+1 4 + 1 м х N 47
Е с л и A f > 2 , то с у м м а р н о е р а с с т о я н и е от точки Z до точек с минимальной и максимальной координатами (т. е. до т о ч е к х и x ) не з а в и с и т от м е с т о п о л о ж е н и я т о ч к и Z и р а в н о д л и н е о т р е з к а [х{, %]. Т а к к а к с у м м а р н о е р а с с т о я н и е до э т и х д в у х т о ч е к п о с т о я н н о , то п о э т о м у м ы их м о ж е м не р а с с м а т р и в а т ь и р е ш а т ь д а л е е з а д а ч у у ж е д л я (N — 2) т о ч е к х x _. П р о в е д я необходимое число р а з с о к р а щ е н и е количества т о ч е к , м ы п р и д е м к у ж е р а с с м о т р е н н ы м с л у ч а я м одной или д в у х точек. х N ъ N t О к о н ч а т е л ь н о п о л у ч а е м : е с л и N — 2k, то т о ч к а Z мо­ ж е т б ы т ь л ю б о й из т о ч е к о т р е з к а [x ; x ], е с л и же N— = 2k-\-l, то т о ч к а Z и м е е т к о о р д и н а т у x . 11. П е р е ф о р м у л и р у е м з а д а ч у : Н а п л о с к о с т и с в о и м и к о о р д и н а т а м и з а д а ю т с я N точек Р , ( х , ; г/,). П о с т р о и т ь о к р у ж н о с т ь м и н и м а л ь н о г о р а д и у с а с ц е н т р о м на оси а б с ц и с с т а к , ч т о б ы она с о д е р ж а л а в н у т р и с е б я и на с в о е й г р а н и ц е в с е эти т о ч к и . В е з д е в д а л ь н е й ш е м б у д е м о б о з н а ч а т ь ч е р е з С(Р; Z ) о к р у ж н о с т ь с ц е н т р о м в т о ч к е ( Я ; О) и п р о х о д я щ у ю ч е р е з т о ч к у Z (х; у). О ч е в и д н о , что на и с к о м о й о к р у ж н о с т и л е ж и т , по меньшей мере, одна точка. Действительно, в противном с л у ч а е м ы м о ж е м , не м е н я я ц е н т р а о к р у ж н о с т и , у м е н ь ­ ш и т ь ее р а д и у с , а это п р о т и в о р е ч и т п р е д п о л о ж е н и ю о т о м , что н а м и б ы л а п о с т р о е н а о к р у ж н о с т ь м и н и м а л ь ­ ного р а д и у с а . Д о к а ж е м с л е д у ю щ е е п р о с т о е у т в е р ж д е н и е : если на и с к о м о й о к р у ж н о с т и л е ж и т е д и н с т в е н н а я т о ч к а , то ц е н т р о к р у ж н о с т и е с т ь п р о е к ц и я этой точки на ось а б с ц и с с . П р е д п о л о ж и м п р о т и в н о е — на м и н и м а л ь н о й о к р у ж ­ ности л е ж и т е д и н с т в е н н а я т о ч к а Z (х у), а ц е н т р ее не с о в п а д а е т с (х; 0). Е с л и м ы н а ч н е м п о н е м н о ж к у д в и г а т ь ц е н т р о к р у ж н о с т и , п р о х о д я щ е й ч е р е з т о ч к у Z, в н а п р а в ­ л е н и и (х; 0), то, т а к к а к все т о ч к и , к р о м е Z, л е ж а т в н у т р и о к р у ж н о с т и , д о к а к о г о - т о м о м е н т а они и б у д у т о с т а в а т ь ­ ся в н у т р и нее. Т а к и м о б р а з о м м ы м о ж е м х о т ь чуть-чуть, k k+l k + i 48
но с д в и н у т ь ц е н т р , у м е н ь ш и в при э т о м р а д и у с о к р у ж н о ­ с т и , с о д е р ж а щ е й все т о ч к и . П о л у ч а е м п р о т и в о р е ч и е с предположением о минимальности радиуса. Следствие. Е с л и на и с к о м о й о к р у ж н о с т и л е ж и т т о л ь ­ ко о д н а т о ч к а , то это т о ч к а с м а к с и м а л ь н о й по м о д у л ю ординатой. О т м е т и м , что о к р у ж н о с т ь с ц е н т р о м на оси а б с ц и с с единственным образом определяется двумя л е ж а щ и м и на ней т о ч к а м и ( ц е н т р этой о к р у ж н о с т и — э т о т о ч к а п е р е с е ч е н и я оси а б с ц и с с и с е р е д и н н о г о п е р п е н д и к у л я р а к о т р е з к у , с о е д и н я ю щ е г о эти д в е т о ч к и ) . Вариант 1. Ш а г 1. И щ е м т о ч к у (х{, y ) с м а к с и м а л ь н о й по м о д у ­ л ю о р д и н а т о й у ( е с л и т а к и х т о ч е к н е с к о л ь к о и у них р а з н ы е а б с ц и с с ы , то п е р е й т и на Ш а г 2) и д л я о к р у ж н о ­ сти С (xf, (х{у yi)) п р о в е р я е м , с о д е р ж и т л и она в с е N точек. Е с л и д а , то з а д а ч а р е ш е н а , е с л и нет, то п е р е х о д и м к Ш а г у 2. Ш а г 2. С р е д и о к р у ж н о с т е й , о п р е д е л я е м ы х в с е в о з ­ м о ж н ы м и п а р а м и т о ч е к (Р ; Р ) , н а х о д и м т е , к о т о р ы е с о д е р ж а т в с е т о ч к и , а з а т е м в ы б и р а е м из них о к р у ж ­ ность минимального радиуса. П а р точек, которые могут определять окружности, в с е г о N (N —1)/2, т. е. п о р я д к а N , с л е д о в а т е л ь н о , и в о з ­ можных окружностей тоже порядка N . Д л я проверки принадлежности N точек к а ж д о й окружности требуется п о р я д к а N о п е р а ц и й . П о л у ч а е м , что с л о ж н о с т ь этого алгоритма порядка N . (Когда мы говорим о сложности а л г о р и т м а , то р а с с м а т р и в а е м т о л ь к о з а в и с и м о с т ь р о с т а ч и с л а т р е б у е м ы х о п е р а ц и й от ч и с л а N, игнорируя все константные множители и медленно растущие слага­ е м ы е . ) Р а с с м о т р и м д р у г о й с п о с о б р е ш е н и я этой з а д а ч и , о с н о в а н н ы й на б о л е е г л у б о к о м е е а н а л и з е . Вариант 2. П р о в е р к а по Ш а г у 1 р а н е е и з л о ж е н н о г о а л г о р и т м а о с т а е т с я б е з и з м е н е н и я . П у с т ь и с к о м а я о к р у ж н о с т ь не найдена. Д л я обоснования Ш а г а 2 докажем следующее утверждение: t { { ; 2 2 3 49
П у с т ь о к р у ж н о с т ь с ц е н т р о м (Рф, 0 ) о п р е д е л я е т с я т о ч к а м и Pi(x{, y ) и Pj(xf, у,). О н а т о л ь к о т о г д а м о ж е т б ы т ь с о д е р ж а щ е й все т о ч к и о к р у ж н о с т ь ю С м и н и м а л ь н о ­ го р а д и у с а , к о г д а (Рф, 0 ) л е ж и т н а о р т о г о н а л ь н о й п р о ­ е к ц и и о т р е з к а [(хц y ); (хц y )] н а о с ь а б с ц и с с , т. е. д о л ж ­ ны в ы п о л н я т ь с я н е р а в е н с т в а х^Рц^х^ О к р у ж н о с т ь С с ц е н т р о м (Рф, 0 ) д о л ж н а п р о х о д и т ь не менее ч е м ч е р е з д в е т о ч к и з а д а н н о г о м н о ж е с т в а из N точек, и п р и э т о м из исходных т о ч е к в с е г д а м о ж н о в ы б р а т ь д в е т а к и е ( о б о з н а ч и м их Р (хц y ) и Pj(xf, y )), что x < Рц< Xj. Д е й с т в и т е л ь н о , е с л и б ы а б с ц и с с ы всех л е ж а щ и х на окружности точек были, н а п р и м е р , меньше Рц, т о (Рф 0 ) м о ж н о б ы л о б ы с м е с т и т ь в л е в о по оси а б с ­ цисс на н е к о т о р у ю в е л и ч и н у с у м е н ь ш е н и е м р а д и у с а о х в а т ы в а ю щ е й в с е т о ч к и о к р у ж н о с т и , что п р о т и в о р е ч и т минимальности найденной ранее окружности. t t t { v f t Н и о д н а из т о ч е к , л е ж а щ и х на о к р у ж н о с т и , не м о ж е т и м е т ь а б с ц и с с ы Рц в с л е д с т в и е н е в ы п о л н е н и я у с л о в и я Ш а г а 1. И т а к : всегда можно найти д в е л е ж а щ и е на окружно­ сти точки P и Pj с а б с ц и с с а м и с о о т в е т с т в е н н о м е н ь ш е и больше абсциссы центра окружности. Эти точки опре­ д е л я ю т ц е н т р о к р у ж н о с т и (Рф 0 ) — т о ч к у п е р е с е ч е н и я с е р е д и н н о г о п е р п е н д и к у л я р а к о т р е з к у [Рц Я-] с осью а б с ц и с с . П р и э т о м т о ч к а (Рф 0), е с т е с т в е н н о , б у д е т л е ж а т ь на п р о е к ц и и о т р е з к а [Pf, Pj] на о с ь а б с ц и с с . Р а с с м а т р и в а я все п а р ы т о ч е к (Рц Pj), т а к и х , что т о ч к а п е р е с е ч е н и я (Рф, 0 ) с е р е д и н н о г о п е р п е н д и к у л я р а к о т р е з к у [Рц Pj] с осью а б с ц и с с л е ж и т на*' п р о е к ц и и о т р е з к а [Рц Pj] н а о с ь а б с ц и с с , п о л у ч а е м , что ц е н т р искомой окружности минимального радиуса совпадает с одной из т а к и м о б р а з о м п о л у ч е н н ы х точек. К а ж д а я из р а с с м а т р и в а е м ы х п а р т о ч е к (Рц Pj) о п р е д е л я е т о к р у ж ­ ность м и н и м а л ь н о г о р а д и у с а с о д е р ж а щ у ю эти две точки. t И з в с е г о в ы ш е с к а з а н н о г о п о л у ч а е м , что и н т е р е с у ю ­ щая нас окружность минимального радиуса, содержа50
щ а я N точек, д о л ж н а и м е т ь м а к с и м а л ь н ы й из всех п о л у ч е н н ы х р а д и у с о в /?,,. В с е г о п а р т о ч е к {Р{, Я,) не б о л е е (N — N)/2, и, с л е д о ­ вательно, сложность алгоритма: 2 О ((N — N)/2) z — 0 (N ~N) 2 = 0 (N ). 2 Здесь мы, как и обычно, и з б а в л я е м с я и медленно растущих от констант слагаемых. Вариант 3. В с е в ы ч и с л е н и я на м а ш и н е п р о в о д я т с я с о г р а н и ­ ченной т о ч н о с т ь ю , с о п р е д е л е н н ы м ч и с л о м з н а к о в п о с л е запятой. Поэтому нам бывает достаточно только ука­ з а т ь , что и н т е р е с у ю щ а я н а с т о ч к а л е ж и т в н у т р и о т р е з к а з а р а н е е з а д а н н о й д л и н ы epsilon. Epsilon з а д а е т с я поль­ зователем. Н а п р и м е р , если мы хотим найти координату т о ч к и с т о ч н о с т ь ю 5 з н а к о в п о с л е з а п я т о й , то epsilon = = 1(Г . В о т л и ч и е от в а р и а н т а 2 м ы не б у д е м б р а т ь в с е п е р п е н д и к у л я р ы , п о п а д а ю щ и е на п р о е к ц и и о т р е з к о в , и искать среди получаемых окружностей окружность с максимальным радиусом. Наоборот, описанным ниже с п о с о б о м б у д е м в ы б и р а т ь точку на оси а б с ц и с с и п р о в е ­ р я т ь , я в л я е т с я л и о н а и с к о м о й и л и нет. И з в а р и а н т а р е ш е н и я 2 м о ж н о с д е л а т ь в ы в о д , что и с к о м а я т о ч к а л е ж и т на о т р е з к е [Л , fi ] = [ m i n {х,}, тах{х,}]. Пусть С = ( Л + f i ) / 2 — середина этого отрез­ к а , a L — B — А — его д л и н а . Обозначим: Dl(C )— м а к с и м а л ь н о е из р а с с т о я н и й от точки ( С ; 0) д о т о ч е к (х{, у ) с а б с ц и с с а м и х , < ; С ; Dr(C ) — м а к с и м а л ь н о е из р а с с т о я н и й от точки ( С ; 0) д о т о ч е к (я,-; у,) с а б с ц и с с а м и х^С . О п и ш е м i-й и т е р а т и в н ы й ( п о в т о р я ю щ и й с я ) ш а г а л г о ­ р и т м а (i = 0, 1, . . . ) . 6 0 0 0 0 0 0 0 0 0 { 0 0 0 0 Е С Л И В, — Аepsilon Т О ц е н т р о к р у ж н о с т и л е ж и т на о т р е з к е | Л ; БД и ж е л а е ­ м а я точность достигнута. Стоп. ( 51
ИНАЧЕ Вычисляем C = (A -\-Bi)/2 Н а х о д и м Dl(Ci) и D r ( C , ) ЕСЛИ DKC^DriCt) Т О и с к о м а я т о ч к а не м о ж е т л е ж а т ь на п р о м е ж у т к е [А{, C ], т а к к а к р а д и у с л ю б о й с о д е р ж а щ е й N точек о к р у ж н о с т и с ц е н т р о м на э т о м п р о м е ж у т к е б о л ь ш е Dr(Cj) (проверьте сами!), а окружность с центром С имеет р а д и у с Dr(C ). Поэтому центр искомой окружно­ сти л е ж и т на о т р е з к е [С,; ВЦ, к о т о р ы й м ы о б о з н а ч и м i i t ; t Им.,; в ] 1+1 ИНАЧЕ ЕСЛИ Dr(Ci)<Dl(CU Т О п о л у ч а е м , что ц е н т р и с к о м о й о к р у ж н о с т и л е ­ ж и т на [A ; С,], к о т о р ы й м ы о б о з н а ч и м B ] ИНАЧЕ Е С Л И £)г(С,) = / ) Ц С , ) Т О С; — ц е н т р и с к о м о й о к р у ж н о с т и . Стоп К о н е ц i­ro и т е р а т и в н о г о ш а г а . В ы п о л н и т ь ш а г г + 1 t i+l М ы в и д и м , что д л и н а L н а ч а л ь н о г о о т р е з к а на к а ж ­ д о м ш а г е у м е н ь ш а е т с я в д в о е . А л г о р и т м , в о о б щ е говоря, заканчивает работу при выполнении условия s L/(2 )^epsilon. П р и м е ч а н и е . Таким образом, требуется не более чем S = = [log (L/epsilon)\-\-\ шагов, где log — это логарифм по основанию 2. Так как на каждом шаге (для вычисления DI и Dr) выполняется не более О (Ы) операций, то всего их потребуется порядка 2 2 О (N log 2 (L/epsilon)). 12. Э т о п е р е б о р н а я з а д а ч а . О б р а т и т е в н и м а н и е , что с т о р о н ы к в а д р а т а м о г у т и не б ы т ь п а р а л л е л ь н ы о с я м к о о р д и н а т ! К а ж д у ю из N т о ч е к м ы п о с л е д о в а т е л ь н о р а с с м а т р и в а е м в качестве верхнего левого угла квадра­ та, к а ж д у ю из оставшихся N — 1 — как нижнюю правую в е р ш и н у и с м о т р и м , е с т ь л и д л я них в этом м н о ж е с т в е из N точек точки, с о о т в е т с т в у ю щ и е в е р х н е м у п р а в о м у и н и ж ­ нему л е в о м у у г л а м . Е с л и д а , то п о д с ч и т ы в а е м , с к о л ь к о точек л е ж и т в данном к в а д р а т е .
П у с т ь к о о р д и н а т а л е в о г о в е р х н е г о у г л а (х , */,), н и ж ­ него п р а в о г о — (х , у ), т о г д а к о о р д и н а т а п е р е с е ч е н и я диагоналей квадрата: х 2 2 ((*, + * ) / 2 ; (у + у )/2); координата верхнего правого угла: 2 1 2 {(x + x )/2 + [y -(y l 2 l (У, + Уг)/2 + + l y )/2]; 2 + х )/2]) = ((ж, + х + у у )/2; (х — х + у + у )/2), нижнего левого: ((х, + х — у + у )/2; (— х + х + у + у )/2). 3 х 2 х 2 2 2 х х 2 2 х 2 х 2 Д л я (х ; у ) и ( х ; г/ ) д о л ж н ы в ы п о л н я т ь с я с л е д у ю щ и е н е р а в е н с т в а : x ^Lx , у ^у ( и н а ч е э т о б у д у т у ж е не левый верхний и правый нижний углы к в а д р а т а ) . 13. И з к о о р д и н а т в е р ш и н п р я м о у г о л ь н и к о в ф о р м и р у ­ ем м а с с и в ы : м а с с и в X , с о д е р ж а щ и й х - к о о р д и н а т ы в е р ­ шин п р я м о у г о л ь н и к о в , с в я з а н н ы й с ним м а с с и в Х , содержащий соответствующие номера прямоугольников, а н а л о г и ч н о ф о р м и р у ю т с я м а с с и в ы Ykor и Ynom д л я «/-коор­ д и н а т . П р и э т о м к о о р д и н а т е в е р ш и н ы с т а в и т с я в со­ о т в е т с т в и е н о м е р со з н а к о м « + », е с л и в е р ш и н а л е в а я нижняя, и знак « — » , если п р а в а я верхняя. х х 2 x 2 2 х 2 kor пот З а т е м м а с с и в ы к о о р д и н а т с о р т и р у ю т в п о р я д к е не­ убывания (при этом соответствие м е ж д у координатами и номерами прямоугольников сохраняется), причем для одинаковых координат вначале должны располагаться н о м е р а л е в ы х ( н и ж н и х ) в е р ш и н (т. е. со з н а к о м « + »), а затем номера правых (верхних). З а д а ч а решается в два этапа. Н а первом этапе решается задача нахождения максимального числа вза­ и м н о п е р е с е к а ю щ и х с я о т р е з к о в на оси Ох ( в к а ч е с т в е о т р е з к о в б е р у т с я п р о е к ц и и п р я м о у г о л ь н и к о в н а ось Ох). М а к с и м а л ь н о е число взаимно пересекающихся отрез­ ков находится следующим образом: п р о с м а т р и в а е м мас­ сив X от н а ч а л а к к о н ц у и у в е л и ч и в а е м н а 1 п е р е м е н ­ ную, соответствующую текущему числу пересечений, есkor 53
ли п р о с м а т р и в а е м а я координата соответствует левому к о н ц у о т р е з к а , и у м е н ь ш а е м э т у п е р е м е н н у ю н а 1, е с л и т е к у щ а я к о о р д и н а т а с о о т в е т с т в у е т п р а в о м у к о н ц у от­ резка. М а к с и м а л ь н о е число взаимно пересекающихся отрез­ ков е с т ь м а к с и м а л ь н о е з н а ч е н и е т е к у щ е г о ч и с л а п е р е с е ­ чений. З а м е т и м , о д н а к о , что е с л и д л я д в у х п р я м о у г о л ь ­ ников их п р о е к ц и и на оси Ох и Оу п е р е с е к а ю т с я , то прямоугольники пересекаются. На втором этапе ищется пересечение прямоугольни­ ков. В о з ь м е м н е к о т о р у ю п р я м у ю в и д а у = С ( п а р а л л е л ь ­ ную оси Ох) и в с е п р я м о у г о л ь н и к и , к о т о р ы е она п е р е с е ­ к а е т , б у д е м н а з ы в а т ь а к т и в н ы м и . Эти п р я м о у г о л ь н и к и в м а с с и в е ACTIV п о м е т и м 1, о с т а л ь н ы е — 0. Теперь, используя р е з у л ь т а т ы первого э т а п а , с учетов м а с с и в а ACTIV находится м а к с и м а л ь н о е число взаимно пересекающихся прямоугольников, которые являются активными для рассматриваемого значения С (ищется максимальное число пересекающихся активных прямо­ угольников). Т е п е р ь о п р е д е л и м в о з м о ж н ы е з н а ч е н и я С. М о ж н о о г р а н и ч и т ь с я т о л ь к о теми з н а ч е н и я м и у, к о т о р ы е со­ ответствуют концевым точкам проекций прямоугольни­ ков на ось Оу. С л е д о в а т е л ь н о , ф о р м и р о в а н и е м а с с и в а ACTIV м о ж е т о с у щ е с т в л я т ь с я по с л е д у ю щ е м у п р и н ц и п у : о т с о р т и р о в а в «/-координаты п р о е к ц и й по н е у б ы в а н и ю з н а ч е н и й (с учетом того ф а к т а , что д л я н е с к о л ь к и х одинаковых координат вначале р а с п о л а г а ю т с я коорди­ наты, соответствующие верхним концам отрезков, а за­ тем р а с п о л а г а ю т с я к о о р д и н а т ы , с о о т в е т с т в у ю щ и е н и ж ­ ним к о н ц а м о т р е з к о в ) . П р о с м а т р и в а я м а с с и в от н а ч а л а к к о н ц у , м ы а к т и в и ­ з и р у е м п р я м о у г о л ь н и к , е с л и т е к у щ а я к о о р д и н а т а со­ ответствует нижнему концу проекции, или отменяем активность прямоугольника, если т е к у щ а я координата с о о т в е т с т в у е т в е р х н е м у концу п р о е к ц и и . П р о ц е с с ф о р м и 54
р о в а н и я м а с с и в а ACTIV начинаем при значении пере­ менной С, р а в н о й м и н и м а л ь н о й у - к о о р д и н а т е ( в н а ч а л е в с е э л е м е н т ы м а с с и в а р а в н ы 0). А л г о р и т м з а к а н ч и в а е т р а б о т у п р и з н а ч е н и и п е р е м е н н о й С, р а в н о й м а к с и м а л ь ­ ной «/-координате. 14. П о н я т н о , что е с л и е с т ь с в е ч а с н у л е в ы м и к о о р д и ­ н а т а м и и л и к а к и е - н и б у д ь д в е свечи л е ж а т н а п р я м о й , п р о х о д я щ е й ч е р е з н а ч а л о к о о р д и н а т , по р а з н ы е с т о р о н ы от н а ч а л а к о о р д и н а т , то р е ш е н и я не с у щ е с т в у е т . П у с т ь т а к и х свеч нет. П р о в е д е м л и н и ю ч е р е з ц е н т р и п е р в у ю с в е ч у ( п у с т ь это т о ч к а А). Е с л и в с е свечи о к а з а л и с ь по одну с т о р о н у от п р я м о й , то р е ш е н и е по­ с т р о е н о . П р е д п о л о ж и м , что с у щ е с т в у ю т свечи по р а з н ы е с т о р о н ы п р я м о й . О п р е д е л и м н а п р а в л е н и е п р я м о й от ц е н т р а к свече, и п у с т ь М — м н о ж е с т в о т о ч е к , л е ж а щ и х по п р а в у ю с т о р о н у от п р я м о й . О п р е д е л и м с р е д и них т о ч к у В, д л я к о т о р о й у г о л АОВ м а к с и м а л ь н ы й и л е ж и т в п р е д е л а х от 0° д о 180°. П р о в е д я п р я м у ю ч е р е з точки О и В, п р о в е р я е м , л е ж а т л и в с е свечи по о д н у с т о р о н у от нее. Е с л и д а , то р е ш е н и е н а й д е н о . Е с л и нет, то р е ш е ­ ния нет. 15. П р и п и ш е м с т о р о н а м к а ж д о г о из N п р я м о у г о л ь н и ­ ков о р и е н т а ц и ю : л е в а я с т о р о н а с ч и т а е т с я и д у щ е й с в е р х у в н и з ( о р и е н т а ц и ю о б о з н а ч и м 1), н и ж н я я — с л е в а н а п р а ­ во (2), п р а в а я — с н и з у в в е р х (3), в е р х н я я — с п р а в а н а л е ­ во (4). Н а й д е м точки п е р е с е ч е н и я всех N п р я м о у г о л ь н и ­ к о в . О б о з н а ч и м это м н о ж е с т в о т о ч е к S. Д о б а в и м в S уг­ л о в ы е т о ч к и всех п р я м о у г о л ь н и к о в . К а ж д о й и з т о ч е к S п р и п и ш е м п а р у , с о с т о я щ у ю из д в у х о р и е н т а ц и и , со­ о т в е т с т в у ю щ и х о р и е н т а ц и и тех р е б е р , п е р е с е ч е н и е м ко­ торых точка является. Найдем в множестве S точку с максимальной ордина­ т о й . Е с л и т а к и х т о ч е к н е с к о л ь к о , то в о з ь м е м с р е д и них т о ч к у Р с м и н и м а л ь н о й а б с ц и с с о й . Э т а т о ч к а л е ж и т на верхней части контура объединения прямоугольников и я в л я е т с я левым верхним углом какого-то прямоуголь­ н и к а . П е ч а т а е м Р . Б у д е м д в и г а т ь с я от Р в н и з по р е б р у , 0 0 0 55
пока не в с т р е т и м одну из точек S (это б у д е т л и б о точ­ ка — в е р ш и н а п р я м о у г о л ь н и к а , л и б о т о ч к а — п е р е с е ч е ­ ние с т о р о н ) . О б о з н а ч и м эту т о ч к у Р . Е й п р и п и с а н а п а р а о р и е н т а ц и и ( О , ; 0 ) , о д н а из о р и е н т а ц и и ( п у с т ь , н а п р и ­ мер, О ) есть 1 (это то р е б р о , по к о т о р о м у м ы п р и ш л и в Р ). П е ч а т а е м Р — о ч е р е д н у ю в е р ш и н у к о н т у р а , и д в и ­ г а е м с я из точки Р (по р е б р у к а к о г о ­ т о п р я м о у г о л ь н и к а ) в н а п р а в л е н и и 0 , п о к а не д о с т и г н е м е щ е к а к о й ­ н и б у д ь в е р ш и н ы из S . О б о з н а ч и м ее Р . У нее п а р а о р и е н т а ц и и (Of; 0 0 . П у с т ь , н а п р и м е р , 0 = 0 , т о г д а мы из о ч е р е д н о й в е р ш и н ы к о н т у р а Р б у д е м д в и г а т ь с я в н а п р а в л е н и и Of и т. д., п о к а не д о с т и г н е м в е р ш и н ы Р . К о н т у р в ы п и с а н . Определим, есть ли в контуре «дырки». Занесем в м а с с и в Л [ 1 . . 2 , 1..2N] в с т р о к у 1 все о р д и н а т ы в е р ш и н п р я м о у г о л ь н и к о в б е з п о в т о р е н и й и о т с о р т и р у е м этот м а с с и в по п е р в о й с т р о к е по в о з р а с т а н и ю . П р е д п о л о ж и м , что в м а с с и в е Л х р а н и т с я всего S р а з л и ч н ы х о р д и н а т : А [ 1 , 1], А [ 1 , s]. С н а ч а л а все А [2, г] = 0, г = 1, S. О п р е д е л и м м а с с и в В [ 1 . . 4 , I..N]. В п е р в о й с т р о к е м а с с и в а В р а с п о л а г а ю т с я в п о р я д к е н е у б ы в а н и я х­коор­ д и н а т ы л е в ы х н и ж н и х и п р а в ы х в е р х н и х в е р ш и н всех N п р я м о у г о л ь н и к о в . П у с т ь В [ 1 , i] — х ­ к о о р д и н а т а к а к о й ­ то в е р ш и н ы Р; В [2, i] и В [3, i] — с о о т в е т с т в е н н о о р д и н а ­ ты н и ж н е й и в е р х н е й в е р ш и н той в е р т и к а л ь н о й стороны п р я м о у г о л ь н и к а , на которой л е ж и т Р ; В [4, £] = 0, если эта в е р т и к а л ь н а я с т о р о н а п р я м о у г о л ь н и к а л е в а я , и 1, если — п р а в а я . Воспользуемся методом сканирующей прямой. Будем б р а т ь по в о з р а с т а н и ю и н д е к с а i э л е м е н т ы ВЦ, i] м а с с и ­ в а В. Е с л и В [4, г] = 0, то б у д е м у в е л и ч и в а т ь на 1, а если В [4, / ] = 1, то у м е н ь ш а т ь на 1 все э л е м е н т ы А [2, / ] т а к и е , что В [2, i]^LA [ 1 , ]]<В [3, i](A [2, / ] б у д е т р а в н о к о л и ч е ­ ству п р я м о у г о л ь н и к о в , с о д е р ж а щ и х в н у т р и с е б я или на г р а н и ц е о т р е з о к Л [ 1 , / ] < Г г / < Л [2, / ] , x = B[l, i]). Е с л и к а к о е ­ т о А [2, / ] = 0, то э т о о з н а ч а е т , что п р я м о ­ у г о л ь н и к и при x — B[l, i] не п о к р ы в а ю т и н т е р в а л у — = (Л[1, /]; Л[1, / + ! ] ) . х 2 х х х х 2 2 2 2 2 0 56
Е с л и м ы н а й д е м т а к и е /, / и k, что при х = В[\, i] интервал (Л [1, /']; Л [1, не п о к р ы т м н о г о у г о л ь н и к а ­ ми (т. е. Л [2, j] = A [2, / + 1] = . . . =А [2, Л] = 0), а и н т е р ­ валы (Л[1, Л [ 1 , /]) и (Л [ 1 , k+Ц Л [ 1 , Л + 2]) п о к р ы т ы (т. е. Л [2, / — 1 ] > 0 и Л [2, & + 1 ] > 0 ) , и т о ч к а (х; у) = (В [ 1 , г']; Л [ 1 , /]) не п р и н а д л е ж и т в н е ш н е м у к о н т у ­ ру ф и г у р ы — о б ъ е д и н е н и ю п р я м о у г о л ь н и к о в , то у ф и г у ­ р ы е с т ь по к р а й н е й м е р е о д н а « д ы р к а » . Ч т о б ы , п р и необходимости, выписать контур «дырки», поступим, как и в с л у ч а е н а х о ж д е н и я в н е ш н е г о к о н т у р а , — п о й д е м по р е б р а м , о б р а з у ю щ и м к о н т у р « д ы р к и » , но обход к о н т у р а н е о б х о д и м о б у д е т о с у щ е с т в л я т ь по ч а с о в о й с т р е л к е , т. е. п р о т и в о р и е н т а ц и и с т о р о н . 16. К о н т у р м о ж е т и м е т ь и з л о м л и ш ь в т о ч к а х , л е ж а ­ щ и х на с т е н а х з д а н и й . З а н е с е м в м а с с и в Л к о о р д и н а т ы L[i] и R[i] и о т с о р т и р у е м его по н е у б ы в а н и ю . З а м е т и м т а к ж е , ч т о м е ж д у д в у х с о с е д н и х стен ( о п р е д е л я е м ы х к а ж ­ дыми двумя соседними элементами массива) высота контура остается постоянной. Поэтому д л я к а ж д ы х двух с о с е д н и х э л е м е н т о в м а с с и в а Л н а й д е м их п о л у с у м м у (координату точки, л е ж а щ е й м е ж д у стенами) и вычис­ л и м в ы с о т у к о н т у р а в этой т о ч к е ; п о с л е этого мы б у д е м з н а т ь в ы с о т ы всех г о р и з о н т а л ь н ы х п л о щ а д о к и к о о р д и ­ наты н а ч а л а и конца этих п л о щ а д о к . Будем в ы п и с ы в а т ь контур точка за точкой, начиная с самой левой точки контура. Если две соседние горизонтальные п л о щ а д к и имеют о д и н а к о в у ю в ы с о т у , то мы их « с к л е и в а е м » , т. е. р а с с м а т ­ риваем к а к одну площадку. Е с л и ж е д в е с о с е д н и е п л о щ а д к и р а з л и ч а ю т с я по в ы с о т е , то, с л е д о в а т е л ь н о , н а д о в ы п и с а т ь в е р т и к а л ь н ы й излом контура. 17. С ч и т а е м , что т о ч к и в S не д у б л и р у ю т с я ( т а к к а к S — м н о ж е с т в о ) . В в е д е м в м н о ж е с т в о S точки (0; да), (0; 0), ( У ; 0), (v; w) — в е р ш и н ы А. Б у д е м и с п о л ь з о в а т ь д в а д в у м е р н ы х м а с с и в а — ВХ и BY; в м а с с и в е ВХ р а с п о ­ л а г а ю т с я координаты точек множества S в порядке 57
н е у б ы в а н и я а б с ц и с с ы , в BY— по н е в о з р а с т а н и ю о р д и н а ­ т ы . П а р а (BX[i, 1]; BX[i, 2]) ( а н а л о г и ч н о (BY[j, 1]; BY [/", 2])) е с т ь х- и «/­координаты т о ч к и из 5 . Р а с с м о т р и м м н о ж е с т в о п р я м о у г о л ь н и к о в Я„ у д о в л е ­ т в о р я ю щ и х у с л о в и ю з а д а ч и . Т о т и з них, к о т о р ы й и м е е т максимальную площадь, и является искомым. Очевидно, что н а к а ж д о й из сторон Я,­ д о л ж н а л е ж а т ь т о ч к а из S л и б о с т о р о н а Я, д о л ж н а л е ж а т ь на с т о р о н е А. Рассмотрим следующие случаи. 1) В е р х н я я с т о р о н а Я л е ж и т на в е р х н е й с т о р о н е п р я м о у г о л ь н и к а А. Д л я к а ж д о й т о ч к и BX[i] и щ е м , д в и ­ г а я с ь по м а с с и в у ВХ в п р а в о и в л е в о от э л е м е н т а ВХ [/], т а к и е п е р в ы е ВХ [/] и BX[k], /<*', k>i, что BX[j, 2 ] > >BX[i, 2], BX[k, 2]>BX[i, 2]. С ч и т а е м , что с т о р о н ы п р я м о у г о л ь н и к а Я, п р о х о д я т : н и ж н я я — ч е р е з т о ч к у BX[i], л е в а я — ч е р е з BX[j], пра­ в а я — ч е р е з ВХ [к]. В е р х н я я с т о р о н а л е ж и т на в е р х н е й с т о р о н е А. Таким образом находим все прямоугольники, примы­ к а ю щ и е к верхней стороне. Прямоугольники, п р и м ы к а ю щ и е к нижней, левой и п р а в о й с т о р о н а м А, н а х о д я т с я а н а л о г и ч н о , но в д в у х п о с л е д н и х с л у ч а я х н а д о в м е с т о ВХ и с п о л ь з о в а т ь м а с ­ сив BY. 2) Н и о д н а из с т о р о н Р не л е ж и т н а с т о р о н е А. Б е р е м последовательно точки массива ВК[£], г = 1 , N, и счи­ т а е м , что в е р х н я я с т о р о н а Я,­ п р о х о д и т ч е р е з т о ч к у £ У [ £ ] . Д л я э т о й т о ч к и п о л а г а е м с н а ч а л а , что X = 0, ^End У­ П р и п р о с м о т р е м а с с и в а BY в п р а в о от э л е м е н т а BY[i] н а х о д и м т а к и е т о ч к и BY[j] и BY [к], к о т о р ы е первыми удовлетворят условиям BY[j, l)^X , BY[k, l]^X , BY[j, l]<BY[i, 1], BY[k, \}>BY[i, 1] ( о б ъ я с н е н и е с м о т р и т е ниже), т. е. м ы находим точки с м а к ­ с и м а л ь н о й о р д и н а т о й , через к о т о р ы е м о ж н о провести п р а ­ вую и л е в у ю стороны п р я м о у г о л ь н и к а Я,. В н у т р и интер­ в а л а (BY[j, 1]; BY[k, 1]) н а о с и Ох и щ е м т о ч к у BY [г, 1] т а к у ю , что / / ­ к о о р д и н а т а э т о й точки BY [г, 2] м а к с и ­ { Begin = Begin End 58
м а л ь н а я , м е н ь ш е в е л и ч и н ы т а х { В У [ / , 2], BY[k, 2]}. Ч е р е з эту т о ч к у В У [г] п р о в е д е м н и ж н ю ю с т о р о н у п р я м о ­ угольника. Полагаем X — ВY[/', 1], X — BY[k, 1]. Н о э т и м п р я м о у г о л ь н и к о м м о ж е т не и с ч е р п ы в а т ь с я все множество прямоугольников, у которых точка ВУ[г] л е ж и т на в е р х н е й с т о р о н е . П о п ы т а е м с я н а й т и е щ е один из т а к и х п р я м о у г о л ь н и к о в . О ч е в и д н о , что л е в а я е г о с т о р о н а и м е е т х - к о о р д и н а т у не м е н ь ш е чем X а пра­ в а я — не б о л ь ш е чем X . Будем искать т а к у ю точку BY [г], что X ^ В Y [г, l]^X (теперь у ж е понятно п о ч е м у ) , BY[r, 2 ] — м а к с и м а л ь н а я из всех о р д и н а т , м е н ь ш е т а х { В У [ / , 2], BY[k, 2]} ( м ы « с у ж а е м » п р я м о ­ у г о л ь н и к к а к м о ж н о н е з н а ч и т е л ь н е е ) . Е с л и BY [г, 1 ] < <ZBY[i, 1], т о э т о н о в а я л е в а я с т о р о н а , и н а ч е — н о в а я п р а в а я . Н а х о д и м н о в у ю н и ж н ю ю с т о р о н у и т. д. Е с л и м ы не м о ж е м н а й т и нового з н а ч е н и я б У [г], т о п р о с м о т р п р я м о у г о л ь н и к о в с точкой В У [г] на в е р х н е й с т о р о н е закончен, и мы переходим к В У [ г ' + 1 ] . Begin End Begin> End Begin End 18. Д л и н а с т о р о н ы п е р в о г о к в а д р а т а — 1, в т о р о г о — 1, т р е т ь е г о — 2, ч е т в е р т о г о — 3 и т. д . В и д н о , что д л и н ы сторон есть числа Фибоначчи, определяемые следующим рекуррентным соотношением: а ( 1 ) = 1 , и ( 2 ) = 1 , u(N) = u(N—l) + u(N — 2). Б у д е м х р а н и т ь к о о р д и н а т ы ч е т ы р е х у г о л ь н и к а Л,-— о б ъ е д и н е н и я к в а д р а т о в с н о м е р а м и от 1 д о /. В т о р о й к в а д р а т Л р и с у е т с я с п р а в а от п е р в о г о Л , , А — с в е р х у от Л , А — с л е в а от А , Л — с н и з у от Л , Л — о п я т ь с п р а в а от Л и т. д. 2 3 2 4 6 3 5 4 5 Как только точка Р впервые попадает в А распеча­ т ы в а е м номер L П р о в е р к а принадлежности точки Р че­ тырехугольнику с параллельными сторонами: пусть л е ­ в ы й в е р х н и й угол (х,; г/,), п р а в ы й н и ж н и й ( х ; у )\ т о ч к а Р(Р ; Р ) п р и н а д л е ж и т четырехугольнику, если о д н о в р е м е н н о х ^Рх^.х и у ^Ру^~У\. 19. О т с о р т и р у е м к о о р д и н а т ы т о ч е к в п о р я д к е н е у б ы ­ вания х-координат, а в случае одинаковых х-координат в п о р я д к е н е в о з р а с т а н и я «/-координат. Н а х о д и м к о о р д и ь 2 Х 2 у х 2 2 59
н а т ы с р е д н е й т о ч к и ( н а х о д я щ е й с я в п о з и ц и и (п. div 2-f+ 1) о т с о р т и р о в а н н о г о м а с с и в а к о о р д и н а т ) . П у с т ь эта т о ч к а и м е е т к о о р д и н а т ы (х ; у ). П р и этом м н о ж е с т в о т о ч е к о к а з а л о с ь р а з б и т ы м на 3 ч а с т и : т о ч к и , л е ж а щ и е на п р я м о й х = х ; т о ч к и , л е ж а щ и е л е в е е п р я м о й х = х ; точ­ ки, л е ж а щ и е п р а в е е п р я м о й х = х . П р е д с т а в и м , что точки, л е ж а щ и е левее прямой х = х , л е ж а т в пределах п р я м о у г о л ь н и к а , х - к о о р д и н а т а п р а в о г о к р а я которого р а в н а х, (х <Сх ), а точки, л е ж а щ и е п р а в е е п р я м о й х = х , л е ж а т в пределах прямоугольника, х-координата ле­ вого к р а я к о т о р о г о р а в н а х (х >х ). П р и этом в е р х н и й и нижний к р а я обоих прямоугольников имеют координа­ ты у и y с о о т в е т с т в е н н о , где у — максимальная //-координата точек, y — м и н и м а л ь н а я //-координата.. Т о г д а с у щ е с т в у е т п р я м а я с д о с т а т о ч н о б о л ь ш и м уг­ л о м н а к л о н а ( н а п р и м е р , с у г л о м н а к л о н а , т а н г е н с кото­ рого п р е в ы ш а е т в е л и ч и н у (у — / / + 2 ) / Z , где Z — = m i n (x —х,, х — х ) , к о т о р а я р а з д е л я е т эти ч а с т и . О с т а ­ л о с ь р а з д е л и т ь т о л ь к о точки на п р я м о й т а к , чтобы количество точек в получившихся частях было равным (т. е. н а й т и т о ч к у п е р е с е ч е н и я р а з д е л я ю щ е й п р я м о й с п р я м о й х — х ). Е С Л И к о л и ч е с т в о т о ч е к нечетно, то р а з д е л я ю щ а я п р я м а я п р о х о д и т ч е р е з с р е д н ю ю точку, иначе — н а д средней точкой отсортированного массива, но п о д п р е д ы д у щ е й , если т а л е ж и т на п р я м о й х = х . 0 0 0 0 0 0 1 0 0 2 тах 2 0 min так min тах Q 2 m i n 0 0 0 Таким образом: х, — м о ж е т б ы т ь н а й д е н а п р о с м о т р о м м а с с и в а х-коорд и н а т с п р а в а н а л е в о от с р е д н е й т о ч к и д о н а х о ж д е н и я п е р в о й к о о р д и н а т ы , о т л и ч н о й от х ; е с л и така^я к о о р д и н а ­ та не н а й д е н а , то х = х —1; х — может быть найдена просмотром массива х-коорд и н а т с л е в а н а п р а в о от с р е д н е й т о ч к и д о н а х о ж д е н и я п е р в о й к о о р д и н а т ы , о т л и ч н о й от х ; е с л и т а к а я к о о р д и н а ­ т а не н а й д е н а , то Х ! = х + 1 ; у — это / / - к о о р д и н а т а точки, п р е д ш е с т в у ю щ е й средней точке, е с л и ее х - к о о р д и н а т а р а в н а х и л и р а в н а / / + 1 , е с л и х - к о о р д и н а т а т о ч к и , п р е д ш е с т в у ю щ е й с р е д н е й точ­ ке, не р а в н а х . 0 1 0 2 0 0 х 0 0 60 0
П о с л е того к а к х , у , х у н а й д е н ы , о с т а л о с ь н а ­ писать уравнение прямой с тангенсом угла наклона (Утах ^т1п + 2 ) / 2 , п р о х о д я щ е й через точку с к о о р д и н а т а ­ ми (х ; у ), о п р е д е л я е м у ю по с л е д у ю щ е м у п р а в и л у : е с л и N — четно, то х = х ; # = (#o + y i ) / 2 , иначе х = х ; у = у 20. П р о в е д е м ч е р е з к а ж д у ю в е р ш и н у этих д в у х в ы ­ п у к л ы х м н о г о у г о л ь н и к о в п р я м ы е , п а р а л л е л ь н ы е оси Оу. Эти п р я м ы е р а з б и в а ю т всю п л о с к о с т ь на п о л о с ы . Пересечение к а ж д о й полосы с в ы п у к л ы м многоугольни­ ком о б р а з у е т т р а п е ц и ю , п о э т о м у в н у т р и к а ж д о й п о л о с ы п е р е с е ч е н и е м д в у х в ы п у к л ы х м н о г о у г о л ь н и к о в б у д е т пе­ р е с е ч е н и е д в у х ч е т ы р е х у г о л ь н и к о в . С о б и р а е м все эти п е р е с е ч е н и я в одну ф и г у р у , у д а л я я п р и этом л о ж н ы е в е р ш и н ы , к о т о р ы е в о з н и к а ю т на г р а н и ц а х м е ж д у п о л о ­ сами. й 0 ь х — 2 2 2 0 2 2 0 2 0 Объединение делается аналогично. 2 1 . Е с л и п р о е к ц и я т о ч к и Z п о п а д а е т на с т о р о н у м н о г о у г о л ь н и к а , а не на ее п р о д о л ж е н и е , то м и н и м а л ь ­ ное р а с с т о я н и е от точки Z до с т о р о н ы е с т ь д л и н а п р о в е ­ д е н н о г о п е р п е н д и к у л я р а . Е с л и ж е п р о е к ц и я т о ч к и Z по­ п а д а е т на п р о д о л ж е н и е с т о р о н ы , то м и н и м а л ь н о е р а с с т о ­ я н и е есть м и н и м у м из р а с с т о я н и й от Z до к о н ц е в ы х т о ч е к этой стороны. М и н и м а л ь н о е р а с с т о я н и е от точки Z до к о н т у р а е с т ь м и н и м у м из р а с с т о я н и й от т о ч к и Z д о к а ж д о й из с т о р о н . 22. П р о в е р я е м , л е ж и т л и т о ч к а Z на к а к о м - л и б о о т р е з к е . Е с л и нет, то п р о в о д и м о т р е з о к , к о н ц е в ы е т о ч к и к о т о р о г о Z, и, н а п р и м е р , т о ч к а с н о м е р о м 1. Н а х о д и м б л и ж а й ш у ю к Z т о ч к у п е р е с е ч е н и я этого о т р е з к а и сто­ рон м н о г о у г о л ь н и к о в , на к о т о р ы е р а з б и в а е т с я п л о с к о с т ь . П у с т ь э т а т о ч к а п р и н а д л е ж и т с т о р о н е АЬ. Д л я т р е у г о л ь ­ н и к а ZAB с н а ч а л а о п р е д е л и м н а п р а в л е н и е о б х о д а конту­ р а от А к В ( з а д а ч а 3). Д л я с т о р о н ы АВ и щ е м с л е д у ю ­ щ у ю , с м е ж н у ю с ней, с т о р о н у ВС к о н т у р а , к о т о р а я о б р а з у е т м а к с и м а л ь н ы й по в е л и ч и н е угол с о т р е з к о м ВА
Рис. 27 ( у г о л о т с ч и т ы в а е т с я от о т р е з к а АВ по ч а с о в о й или п р о т и в ч а с о в о й с т р е л к и в з а в и с и м о с т и от того, по или п р о т и в ч а с о в о й с т р е л к и обход). Н а х о д и м з а м к н у т ы й кон­ т у р и о п р е д е л я е м , н а х о д и т с я т о ч к а Z в н у т р и него или с н а р у ж и ; е с л и с н а р у ж и , то у д а л я е м из ф и г у р ы все р е б р а этого к о н т у р а и п о в т о р я е м п р о ц е с с ( р и с . 2 7 ) . 2 3 . П о д о б н ы е м н о г о у г о л ь н и к и могут б ы т ь з е р к а л ь н о с и м м е т р и ч н ы . Ф и г у р а на п л о с к о с т и п о л н о с т ь ю х а р а к т е ­ р и з у е т с я м а т р и ц е й р а с с т о я н и й C[i, / ] , г д е С [г, / ] — р а с с т о я н и е от в е р ш и н ы / д о в е р ш и н ы / . Д л я к а ж д о й из введенных фигур строим свою матрицу расстояний и п р о в е р я е м , м о ж е м л и мы п о л у ч и т ь из одной м а т р и ц ы другую перестановкой строк и столбцов и умножением всех э л е м е н т о в м а т р и ц ы на о д н о и то ж е ч и с л о . 24. Д а д и м д р у г у ю и н т е р п р е т а ц и ю этой з а д а ч и : есть N отрезков, описываемых уравнениями a x-4-Ъ , — у, х < х < л : | , г — 1 , t { N. 0 П р е д п о л о ж и м , ч т о о т р е з к и не с о в п а д а ю т . 1) Н а й т и в е р х н и й к о н т у р о б ъ е д и н е н и я ф и г у р a x-\~b^y, t i = 1, JV, x ^.x^.x 0 u (т. е. н а й т и т а к у ю р а з б и в к у t , t о т р е з к а [х , х ] и т е к у с о ч к и о т р е з к о в a,x + fe =/y, t j ^ . x ^ t , / = = 0, р — 1, что о т р е з о к flyc-f-f?,- л е ж и т не н и ж е любого другого отрезка при / - ^ х < ^ г ) . Q p 0 ( l + l ; 62 / + 1 х
2 ) Н а й т и т а к у ю р а з б и в к у о т р е з к а [х , x ] т о ч к а м и что в к а ж д о м с е к т о р е S < J f < : S кусочки о т р е з ­ ков а х-\-Ь i— 1, N не п е р е с е к а ю т с я , а на г р а ­ н и ц а х с е к т о р а , п р и x = S и п р и x — S , л е ж и т по к р а й н е й м е р е по одной т о ч к е п е р е с е ч е н и я о т р е з ­ 0 j { I + t 1 ь t ков а,Аг+Ь,-, i—1, i + l N. Р е ш и м с н а ч а л а п у н к т 2 ) з а д а ч и , з а т е м п у н к т 1). Н а й д е м в с е т о ч к и п е р е с е ч е н и я о т р е з к о в а,х-f-b , i = l , N, д р у г с д р у г о м . Д о б а в и м в э т о м н о ж е с т в о т о ч к и x и Х\. У п о р я д о ч и м точки п е р е с е ч е н и я по в о з р а с т а н и ю (если в последовательности встречаются несколько точек с о д н и м и т е м ж е з н а ч е н и е м , то о с т а в л я е м из них т о л ь к о одну). Получаем таким образом последовательность ; Q SQ, SQ. Д л я к а ж д о г о о т р е з к а [S S ], / = 0, Q—1 н а х о ­ д и м е г о с е р е д и н у Z - = (S - + S - ) / 2 , в ы ч и с л я е м з н а ч е н и я /, = a , Z ; - ( - г = 1 , N, с о р т и р у е м их по в о з р а с т а н и ю . Индексы i значений в отсортированной последователь­ ности д л я ф и к с и р о в а н н о г о / к а к р а з и е с т ь и с к о м а я п е р е с т а н о в к а (г,,-, г' , i ) чисел 1, 2 , 3, N, у п о м я н у ­ тая в формулировке задачи в пункте 2 д л я отрезка p / / j+l / + 1 7 2/ [S„ S / + I Nj ]. Д л я р е ш е н и я п у н к т а 1 в ы п и ш е м по п о р я д к у д л я к а ж д о г о о т р е з к а [S S ], /* = 0 , Q— 1, в е л и ч и н ы i (это индекс самого верхнего отрезка в секторе [ S S ] ) . Отрезок с номером k может быть самым верхним д л я н е с к о л ь к и х с м е ж н ы х с е к т о р о в [Sj, S ], [S S ]. Поэтому мы просматриваем номера i , соответствующие о т р е з к а м [S S ] , / = 0 , Q — 1, и о п р е д е л я е м п о с л е д о ­ в а т е л ь н ы е м а к с и м а л ь н ы е отрезки, помеченные одним и т е м ж е н о м е р о м . К о н ц е в ы е точки этих м а к с и м а л ь н ы х о т р е з к о в и е с т ь и с к о м ы е точки t , t (они в ы б и р а ю т с я по у к а з а н н о м у в ы ш е м е т о д у из т о ч е к S , S ). jt j+l Nj / 5 j+1 n / + 1 r + 1 Nj jt / + l 0 p 0 Q 2 5 . Пусть в фигуре у ж е проведены L диагоналей, и они р а з б и в а ю т n - у г о л ь н и к на К ч а с т е й . П р о в е д е м е щ е одну ( L + l ) - r o диагональ. Подсчитаем, сколько ранее п р о в е д е н н ы х д и а г о н а л е й п е р е с е к а е т во в н у т р е н н и х точ63
ках эта диагональ. Обозначим количество пересечений через S. Проведение диагонали: 1) у в е л и ч и в а е т количество разбивок л-угольника на 1; 2) к а ж д о е п е р е с е ч е н и е этой д и а г о н а л и с р а н е е п р о в е ­ денной диагональю т а к ж е увеличивает количество р а з б и в о к н а 1 ( п о у с л о в и ю н и к а к и е 3 д и а г о н а л и не п е р е с е к а ю т с я в одной т о ч к е ) . И т а к , после проведения ( L + l ) - f t д и а г о н а л и коли­ чество ч а с т е й с т а н е т A' + S + l ( п р е д п о л а г а е т с я , что (L-4- 1)-я д и а г о н а л ь не с о в п а д а е т ни с одной р а н е е п р о в е ­ денной). К а к определить, пересекается ли диагональ, соединя­ ющая вершины i и /, с диагональю, заданной вершинами т и р ? Вершины i и / р а з б и в а ю т контур многоугольника на 2 ч а с т и : м н о ж е с т в о А — в е р ш и н ы , л е ж а щ и е на конту­ ре м е ж д у в е р ш и н а м и / и /, и множество В — вершины к о н т у р а м е ж д у / и i ( м н о ж е с т в а Л и В не в к л ю ч а ю т i и / ) . Е с л и m п р и н а д л е ж и т о д н о м у и з этих м н о ж е с т в , ар — другому, то д и а г о н а л и пересекаются, иначе — нет. 26. Б у д е м о б о з н а ч а т ь ч е р е з V в е р ш и н у л о м а н о й с к о ­ о р д и н а т а м и (х„ г/ ). С н а ч а л а рассмотрим р а з р е з круга ломаной, состоя­ щ е й т о л ь к о из д в у х р е б е р R = (V ; V ) и R = (V , V ). Д л я того ч т о б ы р а з н я т ь э т о т к р у г , н е о б х о д и м о т я н у т ь в н а п р а в л е н и и вектора S, выходящего из точки V и л е ­ ж а щ е г о л и б о в н у т р и у г л а VyV V ( в е р ш и н а у г л а — т о ч к а V ), л и б о в н у т р и ц е н т р а л ь н о - с и м м е т р и ч н о г о е м у относи­ тельно точки V угла. Будем говорить, что вектор S л е ­ жит в конусе С с вершиной V . t ; l l 2 2 2 3 2 2 3 2 2 2 2 Аналогично, если л о м а н а я определяется k вершина­ ми, т о д л я к а ж д о й п а р ы р е б е р (Vf, V ) и (V ; V ), i — 1 , k — 2, о п р е д е л я е м конус C возможных направ­ л е н и й п е р е м е щ е н и я , з а т е м с ч и т а е м , что п а р а л л е л ь н ы м п е р е н о с о м в е р ш и н ы всех к о н у с о в с о в м е щ е н ы в одной т о ч к е . П е р е с е ч е н и е всех С i — 2, k—1, и д а с т и с к о ­ мое в о з м о ж н о е н а п р а в л е н и е р а з н и м а н и я к р у г а . Е с л и э т о i+l i+l ь 64 ( + 1 i+2
п е р е с е ч е н и е пусто, то к р у г р а з н я т ь н е л ь з я , и н а ч е — можно. 2 7 . П у с т ь т о ч к а Z — ц е н т р к о о р д и н а т (если это не т а к , с д е л а е м п а р а л л е л ь н ы й п е р е н о с ) . Д л я того чтобы з в е н о з а б о р а б ы л о п о л н о с т ь ю видно, н е о б х о д и м о и д о с т а ­ точно, ч т о б ы из точки Z, где стоит ч е л о в е к , б ы л и в и д н ы о б е в е р ш и н ы этого з в е н а и е щ е к а к а я - н и б у д ь его внут­ р е н н я я т о ч к а . Б у д е м с ч и т а т ь , что в е р ш и н а Р з в е н а в и д н а , е с л и и н т е р в а л ( Z ; Р) не п е р е с е к а е т н и к а к и х з в е н ь е в з а б о р а или ж е если обе к о н ц е в ы е в е р ш и н ы п е р е с е к а е м о г о з в е н а k л е ж а т на [Z; Р], т. е. ч е л о в е к с м о т р и т в д о л ь з в е н а k. О т с о р т и р у е м по н е у б ы в а н и ю у г л ы , о б р а з у е м ы е с о с ь ю Ох о т р е з к а м и , о д н а к о н ц е в а я т о ч к а к о т о р ы х Z, а в т о р а я п р о б е г а е т все в е р ш и н ы з в е н ь е в ( у г л ы о т с ч и т ы в а ю т с я от точки Z в п о л о ж и т е л ь н о м направлении, т. е. п р о т и в ч а с о в о й с т р е л к и ) . П о л у ч а е м п о с л е д о в а т е л ь ­ ность углов а , а , а . Д о б а в л я е м в эту п о с л е д о в а т е л ь ­ ность угол а — а . И з точки Z в н а п р а в л е н и и м е ж д у п р я м ы м и , идущими под углами a и a может быть в и д е н кусок т о л ь к о одного е д и н с т в е н н о г о з в е н а . И з точки Z под у г л а м и ( a , - f a , , ) / 2 , i= 1, п, п р о в о ­ дим лучи и д л я каждого луча смотрим, какое звено k этот л у ч п е р е с е к а е т п е р в ы м ( п е р е с е ч е н и е по в е р ш и н е не у ч и т ы в а е т с я ) . В том с л у ч а е , е с л и у этого з в е н а к в и д н ы о б е в е р ш и н ы , то з в е н о в и д н о п о л н о с т ь ю , е с л и хотя бы о д н а в е р ш и н а не в и д н а , то k в и д н о ч а с т и ч н о . П о с л е а н а л и з а т о ч е к п е р е с е ч е н и я всех п л у ч е й т е з в е н ь я , к о т о р ы е не в и д н ы ни п о л н о с т ь ю , ни ч а с т и ч н о , получают пометку невидимых. 28. Р а с с м а т р и в а е м номера граней как элементы мас­ с и в о в . С о р т и р у е м к а ж д ы й из м а с с и в о в с п о м о щ ь ю н е к о ­ т о р о г о о б м е н н о г о а л г о р и т м а ( н а п р и м е р , с п о м о щ ь ю «пу­ зырьковой» сортировки), подсчитывая количество обме­ нов ( п у с т ь это KN и КМ с о о т в е т с т в е н н о ) . Е с л и о т с о р т и ­ р о в а н н ы е м а с с и в ы с о в п а д а ю т и (KN — КМ) к р а т н о 2, то т е т р а э д р ы совпадают. (Обмен двух граней можно трак­ товать как отражение тетраэдра в зеркале.) х п + 1 2 п х t i + b + 3 Информатика, 8—9 кл. 65
Глава 2 . ПОИСК М СОРТИРОВКИ § 1. П О С Л Е Д О В А Т Е Л Ь Н Ы Й П О И С К НЕОБХОДИМОГО ЭЛЕМЕНТА В МАССИВЕ Человеку постоянно приходится сталкиваться с з а д а ­ чами поиска требуемой информации. Типичными приме­ р а м и м о ж е т с л у ж и т ь р а б о т а с тем или и н ы м с п р а в о ч н и ­ ком, т е л е ф о н н о й к н и г о й , б и б л и о т е ч н о й к а р т о т е к о й . В п р о г р а м м и р о в а н и и поиск я в л я е т с я одной из н а и б о ­ л е е ч а с т о в ы п о л н я е м ы х о п е р а ц и й . Б у д е м с ч и т а т ь , что м н о ж е с т в о из N э л е м е н т о в з а д а н о в в и д е м а с с и в а ( т а б ­ лицы) А Среди разновидностей простейших з а д а ч поиска, в с т р е ч а ю щ и х с я на п р а к т и к е , м о ж н о в ы д е л и т ь с л е д у ю ­ щие типы: 1. Н а й т и хотя б ы один э л е м е н т , р а в н ы й з а д а н н о м у э л е м е н т у X. В р е з у л ь т а т е н е о б х о д и м о п о л у ч и т ь / — ин­ д е к с ( н о м е р ) э л е м е н т а м а с с и в а т а к о й , что АЩ — Х. 2. Н а й т и в с е э л е м е н т ы , р а в н ы е з а д а н н о м у X. В ре­ з у л ь т а т е необходимо получить количество таких элемен­ тов и ( и л и ) их и н д е к с ы . И н о г д а п о и с к о р г а н и з у е т с я не по с о в п а д е н и ю с э л е ­ м е н т о м X, а по в ы п о л н е н и ю н е к о т о р ы х у с л о в и й . П р и м е ­ ром м о ж е т с л у ж и т ь п о и с к э л е м е н т о в , у д о в л е т в о р я ю щ и х у с л о в и я м А ! ^ Д [f']=S^2> где Х и Х ^заданы. Е с л и у н а с нет н и к а к о й д о б а в о ч н о й и н ф о р м а ц и и о р а з ы с к и в а е м ы х д а н н ы х , то о ч е в и д н ы й п о д х о д — это последовательный просмотр массива. Такой метод назы­ в а е т с я линейным и л и последовательным поиском. Рассмотрим сначала реализацию последовательного п о и с к а д л я з а д а ч т и п а 1. П о и с к з а к а н ч и в а е т с я п р и в ы п о л н е н и и одного из д в у х следующих условий: - { 66 2
1. Э л е м е н т н а й д е н , т. е. в м а с с и в е е с т ь т а к о й э л е м е н т А [г], что А Щ = Х. 2. В е с ь м а с с и в п р о с м о т р е н и с о в п а д е н и я не о б н а р у ­ жено. О д н и м из в о з м о ж н ы х р е ш е н и й д а н н о й з а д а ч и м о ж е т б ы т ь с л е д у ю щ е е : пусть Р — п е р е м е н н а я л о г и ч е с к о г о т и ­ п а , к о т о р а я имеет з н а ч е н и е « и с т и н а » , если э л е м е н т в массиве найден, и «ложь» — в противном случае. Р: =«Ложь» нц д л я i от 1 д о N если A[i] = X то Р : = «Истина» все кц (2.1) Е с л и п о с л е в ы п о л н е н и я а л г о р и т м а Р = « И с т и н а » , то э л е м е н т н а й д е н , если п е р е м е н н а я Р не и з м е н и л а своего з н а ч е н и я , то э л е м е н т а нет. Ч а с т о т р е б у е т с я не т о л ь к о о п р е д е л и т ь , есть л и в м а с ­ с и в е и с к о м ы й э л е м е н т , но и у с т а н о в и т ь , на к а к о м м е с т е он н а х о д и т с я . Б у д е м х р а н и т ь и н д е к с н а й д е н н о г о э л е ­ м е н т а в п е р е м е н н о й КК: = 0 н ц д л я i от 1 д о N если A [ i ] = X то K:=i все кц (2.2) П о с л е в ы п о л н е н и я д а н н о г о а л г о р и т м а по з н а ч е н и ю п е р е м е н н о й К м о ж н о о п р е д е л и т ь , е с т ь ли в м а с с и в е и с к о м ы й э л е м е н т , и е с л и есть, то г д е он стоит. Е с л и в м а с с и в е н е с к о л ь к о т а к и х э л е м е н т о в , то в п е р е м е н н о й К б у д е т х р а н и т ь с я н о м е р п о с л е д н е г о из них. Е с л и т а к о г о э л е м е н т а нет, то з н а ч е н и е п е р е м е н н о й К не и з м е н и т с я (останется равным нулю). 67
На практике операцию поиска приходится выполнять достаточно часто, и скорость работы п р о г р а м м ы нахо­ д и т с я в п р я м о й з а в и с и м о с т и от и с п о л ь з у е м о г о а л г о р и т м а поиска. В рассмотренных выше алгоритмах требуется про­ с м о т р е т ь в е с ь м а с с и в д а ж е в том с л у ч а е , е с л и и с к о м ы й э л е м е н т н а х о д и т с я в м а с с и в е на п е р в о м м е с т е . Д л я сокращения времени поиска можно останавли­ в а т ь с я с р а з у п о с л е того, к а к э л е м е н т н а й д е н . В э т о м с л у ч а е весь м а с с и в п р и д е т с я п р о с м о т р е т ь т о л ь к о т о г д а , к о г д а и с к о м ы й э л е м е н т п о с л е д н и й или его нет в о о б щ е . В результате получим следующий алгоритм: i: = l нц п о к а ( i < = N ) |i:=i + l кц и (A [ i ] < > Х ) (2.3) Ц и к л з а к а н ч и в а е т работу, либо когда будет найден и с к о м ы й э л е м е н т , л и б о к о г д а i = N-{-l ( э л е м е н т а , с о в п а ­ д а ю щ е г о с X, не с у щ е с т в у е т ) . На каждой итерации цикла требуется увеличивать индекс i и вычислять логическое выражение. Д а в а й т е п о п ы т а е м с я у с к о р и т ь поиск, у п р о с т и в л о г и ч е с к о е в ы р а ­ жение. Поместим в конец массива дополнительный эле­ мент со з н а ч е н и е м X. Т о г д а с о в п а д е н и е с X о б я з а т е л ь н о п р о и з о й д е т , и мы м о ж е м о т б р о с и т ь п р о в е р к у у с л о в и я (A[i]OX). Такой вспомогательный элемент часто на­ з ы в а ю т « б а р ь е р о м » или « ч а с о в ы м » , т а к к а к он п р е п я т с т ­ вует в ы х о д у з а п р е д е л ы м а с с и в а . В исходном м а с с и в е теперь будет i V + 1 элемент. Алгоритм поиска с «барьером» выглядит следующим образом: A [ N + 1]: = Х i: = 1 нц пока A [ i ] < > X | i:=i+l кц 68 (2.4)
Е с л и по выходу из ц и к л а i = N-\-l (X р а в е н « б а р ь ­ е р у » ) , то э л е м е н т а X в м а с с и в е Л [ 1 ..Л/] нет. Д л я реализации поиска в з а д а ч а х типа 2 (нахожде­ ние к о л и ч е с т в а э л е м е н т о в , р а в н ы х X) в л ю б о м с л у ч а е придется просматривать весь массив. Е с л и т р е б у е т с я о п р е д е л и т ь к о л и ч е с т в о э л е м е н т о в , то з а в о д я т п е р е м е н н у ю , з н а ч е н и е к о т о р о й у в е л и ч и в а ю т на 1 к а ж д ы й р а з , когда найден н у ж н ы й элемент. Т а к у ю п е р е м е н н у ю н а з ы в а ю т «счетчиком». Д о н а ч а л а просмот­ ра элементов массива «счетчику» нужно з а д а т ь началь­ ное з н а ч е н и е или, д р у г и м и с л о в а м и , инициализировать з н а ч е н и е п е р е м е н н о й . В д а н н о м с л у ч а е это н а ч а л ь н о е значение равно нулю. Алгоритм подсчета элементов, равных заданному, составьте самостоятельно. Д л я получения индексов искомых элементов созда­ д и м н о в ы й м а с с и в B[l..N]. К а к только будет найден н е о б х о д и м ы й э л е м е н т , его и н д е к с б у д е т з а н о с и т ь с я в м а с с и в В. В п е р е м е н н о й К б у д е т х р а н и т ь с я н о м е р п о с л е д н е г о з а н я т о г о м е с т а в м а с с и в е В. С н а ч а л а / ( = 0 . К: = 0 н ц д л я i от 1 до N если A [ i ] = X то К:=К-И (2.5) B[KJ:=i все кц П о с л е з а в е р ш е н и я р а б о т ы п е р в ы е Д' э л е м е н т о в м а с ­ сива В будут с о д е р ж а т ь индексы искомых элементов. Вопросы для повторения 1. Что н а з ы в а ю т п о с л е д о в а т е л ь н ы м поиском? 2 . Как о п р е д е л и т ь , что в м а с с и в е б ы л н а й д е н э л е м е н т ? 3 . К а к о й из а л г о р и т м о в (2.2), (2.3) или ( 2 . 4 ) р а б о т а е т б ы с т р е е и почему? 4. Что т а к о е поиск с « б а р ь е р о м » ? 5 . Д л я ч е г о и с п о л ь з у ю т п е р е м е н н ы е «счетчики»? 6 . Что т а к о е и н и ц и а л и з а ц и я п е р е м е н н о й ? 69
§ 2. П О И С К М А К С И М А Л Ь Н О Г О И М И Н И М А Л Ь Н О Г О ЭЛЕМЕНТОВ В МАССИВЕ Очень часто для решения задачи требуется находить не з а д а н н ы й э л е м е н т м а с с и в а , а м а к с и м а л ь н ы й ( н а и ­ б о л ь ш и й ) или м и н и м а л ь н ы й ( н а и м е н ь ш и й ) э л е м е н т . Рассмотрим задачу нахождения максимального эле­ м е н т а . Е с л и в м а с с и в е один е д и н с т в е н н ы й э л е м е н т , т о он и есть максимальный. В противном случае воспользу­ е м с я т е м , что м а к с и м а л ь н ы м в м а с с и в е из i э л е м е н т о в я в л я е т с я м а к с и м у м из A [i] и м а к с и м а л ь н о г о с р е д и п е р ­ в ы х i-l э л е м е н т о в . m a x : = А [1] н ц д л я i от 2 до N если A [ i ] > m a x то m a x : = А [i] все нц (2.6) После завершения работы в переменной max будет храниться значение максимального элемента массива. О д н а к о д а н н ы й а л г о р и т м не п о з в о л я е т о п р е д е л и т ь , на к а к о м м е с т е в м а с с и в е н а х о д и т с я этот м а к с и м а л ь н ы й элемент. Будем использовать перменную К для хранения индекса максимального элемента. m a x : = А [1] К: = 1 н ц д л я i от 2 до N если A [ i ] > m a x то max:=A[i] K:=i все кц (2.7) После выполнения алгоритма переменная К будет содержать значение индекса максимального элемента. 70
Если в массиве несколько элементов имеют м а к с и м а л ь ­ ное з н а ч е н и е , то в п е р е м е н н о й К б у д е т з а п о м и н а т ь ­ с я и н д е к с п е р в о г о из них. Е с л и и с п о л ь з о в а т ь у с л о в и е Л [ / ] ^ т а х , то б у д е т з а п о м и н а т ь с я и н д е к с п о с л е д н е г о из максимальных. Д л я поиска минимального элемента необходимо за­ м е н и т ь з н а к > в Е С Л И на з н а к < • Вопросы для повторения 1. К а к о й э л е м е н т м а с с и в а я в л я е т с я м а к с и м а л ь н ы м , к а к о й — минимальным? 2 . Как найти м а к с и м а л ь н ы й э л е м е н т в м а с с и в е ? Как найти минимальный элемент в массиве? 3 . Как о п р е д е л и т ь н о м е р п е р в о г о э л е м е н т а , р а в н о г о м а к с и ­ мальному? 4. Как о п р е д е л и т ь н о м е р п о с л е д н е г о э л е м е н т а , р а в н о г о м и н и ­ мальному? § 3. У П О Р Я Д О Ч Е Н И Е ЭЛЕМЕНТОВ МАССИВА Сортировка м а с с и в а — э т о расстановка элементов массива в некотором порядке. В отсортированном масси­ в е , з а счет п р е д в а р и т е л ь н о в ы п о л н е н н о й р а б о т ы по у п о ­ рядочению, поиск элемента ( д а ж е в худшем случае) м о ж н о о с у щ е с т в л я т ь , не п р о с м а т р и в а я весь м а с с и в . П р и ­ м е р о т с о р т и р о в а н н о г о м а с с и в а — это, н а п р и м е р , с п и с о к телефонов в справочнике, список ф а м и л и й в адресной к н и г е и т. д . Примером задачи сортировки может служить следую­ щ а я : в м а с с и в е из N р а з л и ч н ы х ч и с е л н е о б х о д и м о о с у щ е ­ с т в и т ь их п е р е с т а н о в к у т а к , ч т о б ы п о с л е нее в м а с с и в е первым элементом было самое большое число. К а ж д о е следующее должно быть меньше предыдущего, а послед­ н е е — с а м о е м а л е н ь к о е из чисел д а н н о г о м а с с и в а . Т а к о й п о р я д о к р а с п о л о ж е н и я чисел н а з ы в а ю т убывающим. Е с л и в м а с с и в е е с т ь р а в н ы е ч и с л а , то з а д а ч у м о ж н о п е р е ф о р м у л и р о в а т ь с л е д у ю щ и м о б р а з о м : в м а с с и в е из 71
N ч и с е л о с у щ е с т в и т ь их п е р е с т а н о в к у т а к , ч т о б ы п о с л е перестановки в массиве первым элементом было самое б о л ь ш о е ч и с л о . К а ж д о е с л е д у ю щ е е д о л ж н о б ы т ь не б о л ь ш е п р е д ы д у щ е г о , а п о с л е д н е е — с а м о е м а л е н ь к о е из чисел данного массива. Такой порядок расположения чисел н а з ы в а ю т не возрастающим. Порядок, при котором в массиве первым элементом является самое маленькое число, к а ж д о е следующее число больше предыдущего, а последнее — самое боль­ шое из чисел д а н н о г о м а с с и в а н а з ы в а ю т возрастающим. Е с л и в м а с с и в е е с т ь р а в н ы е ч и с л а и они р а с п о л о ж е ­ ны т а к , что п е р в ы м э л е м е н т о м я в л я е т с я с а м о е м а л е н ь к о е ч и с л о , к а ж д о е с л е д у ю щ е е ч и с л о не м е н ь ш е п р е д ы д у щ е г о , а п о с л е д н е е — с а м о е б о л ь ш о е из ч и с е л д а н н о г о м а с с и в а , то т а к о й п о р я д о к н а з ы в а ю т неубывающим. З а д а ч а сортировки, как и л ю б а я другая задача, м о ж е т р е ш а т ь с я м н о ж е с т в о м с п о с о б о в , к а ж д ы й из кото­ рых имеет к а к достоинства, т а к и недостатки. Выбор способа сортировки определяется особенностями решае­ мой з а д а ч и . П р и выборе метода сортировки необходимо учиты­ вать объем требуемой памяти и скорость работы. При сортировке массива желательно использовать как можно меньше дополнительной памяти, поэтому обычно рас­ сматриваются алгоритмы, которые упорядочивают мас­ сив п е р е с т а н о в к а м и его э л е м е н т о в ( б е з и с п о л ь з о в а н и я еще одного массива). Оценить скорость работы метода сортировки можно, оценив количество требуемых опера­ ций с р а в н е н и я и ( и л и ) о п е р а ц и й п е р е с т а н о в о к "элементов. Н и ж е рассматриваются методы сортировки линейно­ го м а с с и в а по у б ы в а н и ю ( н е в о з р а с т а н и ю ) . С о р т и р о в к а по в о з р а с т а н и ю ( н е у б ы в а н и ю ) п р о и з в о д и т с я а н а л о г и ч н о . 3.1. Сортировка выбором Д а в а й т е п р е д с т а в и м , что п е р е д н а м и п о с т а в л е н а з а ­ д а ч а р а с с т а в и т ь N чисел по у б ы в а н и ю . К а к б ы мы ее решали? 72
Наверное, пришлось бы сначала найти максимальное и з всех ч и с е л и п о м е н я т ь м е с т а м и с п е р в ы м ч и с л о м . З а ­ т е м из е щ е н е о т с о р т и р о в а н н ы х э л е м е н т о в н а д о б ы л о бы опять выбрать максимальный элемент и поменять места­ ми с п е р в ы м элементом из е щ е не отсортированной части. Примененный нами метод и называется сортировкой выбором. Ф о р м а л ь н о его м о ж н о о п и с а т ь с л е д у ю щ и м о б р а з о м . Н а i-м ш а г е ( г = 1 , N—1): в ы б и р а е м из э л е м е н т о в с и н д е к с а м и от i до N м а к с и ­ мальный элемент; меняем местами найденный максимальный и элемент А [/']; на г'-м м е с т е о к а з ы в а е т с я м а к с и м а л ь н ы й э л е м е н т из еще неотсортированной части массива. П о с л е в ы п о л н е н и я N—1-го ш а г а в п о з и ц и и A [N] будет находиться самый маленький элемент массива. Н а з в а н и е м е т о д а , «сортировка выбором» определяет­ ся тем, что на к а ж д о м ш а г е м ы находим ( в ы б и р а е м ) м а к ­ с и м а л ь н ы й э л е м е н т из е щ е н е о т с о р т и р о в а н н о й ч а с т и массива. Запишем алгоритм сортировки выбором: н ц д л я i от 1 до N—1 K: = i m a x : = A [i] н ц д л я j от i + 1 если A [ i ] > m a x то max:=A[j] K:=j все кц A[K]:=A[i] A[i]:=max кц Внутренний до N цикл Д Л Я (2.8) j ОТ i + 1 ДО N является 73
ничем и н ы м , к а к а л г о р и т м о м п о и с к а м а к с и м а л ь н о г о а л г о р и т м а с р е д и э л е м е н т о в с н о м е р а м и от 1 до N. Р а с с м о т р и м р а б о т у д а н н о г о м е т о д а на м а с с и в е А= = {0, 1 , 9, 2, 4, 3, 6, 5}. М а к с и м а л ь н ы й э л е м е н т будем подчеркивать. 1) 0 , 1, 9, 2, 4, 3, 6, 5 2) 9, 1, 0, 2, 4, 3, 6, 5 3) 9, 6, 0, 2, 4, 3, 1, 5 4) 9, 6, 5 , 2, 4, 3, 1, О 5 ) 9, 6, 5, 4, 2, 3, 1, О 6) 9, 6, 5, 4, 3 , 2, 1, О 7) 9, 6, 5 , 4, 3, 2, 1, О 8) 9, 6, 5, 4, 3, 2, 1, О Подсчитаем количество сравнений, которые пришлось сделать для упорядочения массива. На первом шаге д л я нахождения максимального эле­ м е н т а н е о б х о д и м о (N — 1) с р а в н е н и е , на в т о р о м (N — 2), на т р е т ь е м (N — 3), на п о с л е д н е м ш а г е — одно с р а в ­ нение. Н а й д е м с у м м у : N - I + N - 2 + N - 3 +... + \ = N (N - \ )/2 = (N 2 N)/2. П р и м е ч а н и е . Сумму можно посчитать исходя из следующих соображений. Количество слагаемых равно (N—1), сумма первого и последнего, второго и предпоследнего и т. д. равна N. Произведение N(N—1) даст удвоенную сумму, так как каждое слагаемое будет входить в эту сумму дважды, поэтому его нужно разделить на 2. Количество перестановок элементов равно Это количество определяется внешним циклом (N—1). ДЛЯ. 3.2. Сортировка о б м е н о м Р а с с м о т р и м е щ е один м е т о д с о р т и р о в к и , к о т о р ы й формально можно описать так: Н а 1-м ш а г е (/ = 1, N—1) выполняем: 1. С р а в н и в а е м п е р в ы е д в а э л е м е н т а . Е с л и п е р в ы й м е н ь ш е в т о р о г о , то м е н я е м их м е с т а м и . 74
2. С р а в н и в а е м второй и т р е т и й , т р е т и й и ч е т в е р т ы й , N — i и N — i-f-1, при необходимости меняя элементы м е с т а м и . С а м ы й м а л е н ь к и й о к а ж е т с я на г-м м е с т е в м а с ­ сиве. После первого шага самый маленький элемент масси­ в а п о м е щ а е т с я на N-e м е с т о . М а с с и в б у д е т о т с о р т и р о в а н после просмотра, в котором участвуют только первый и второй элементы. Н а з в а н и е м е т о д а «сортировка обменом» определяет­ с я т е м , что а л г о р и т м о с н о в ы в а е т с я на о б м е н е м е с т а м и двух элементов массива. Описанный метод сортировок обменом н а з ы в а ю т так­ ж е пузырьковой сортировкой. Алгоритм метода сортировки обменом: н ц д л я i от 1 до N — 1 н ц д л я j от 1 до N — i если A [ j ] < A [ j + l ] то x:=A[j] A [ j ] : = A [ j + l] A[j + l ] : = x все кц кц Р а с с м о т р и м его 9, 2, 4, 3 , 6, 5}. 1) 1, 9, 2, 4, 3, 2) 9, 2, 4, 3, б, 3) 9, 4, 3, 6, 5, 4) 9, 4, б, 5, 3, 5) 9, 6, 5, 4, 3 , 6) 9, 6, 5, 4, 3, 7) 9, 6, 5, 4, 3, (2.9) на п р и м е р е гого ж е м а с с и в а Л — {0, 1, 6, 5, 2, 2, 2, 2, 2, 5, 1, 1, 1, 1, 1, 1, О О О О О О О Число сравнений в данном алгоритме равно также (N -N)/2. При к а ж д о м сравнении возможна перестановка двух 2 75
элементов в массиве. Поэтому количество перестановок (в худшем случае) будет равно количеству сравнений, т. е. (N -N)/2. * На последних двух проходах в приведенном выше п р и м е р е м а с с и в не м е н я л с я . З а м е т и м , что если на к а ­ ком-то шаге алгоритма элементы массива у ж е упоря­ д о ч е н ы , то п р и п о с л е д у ю щ и х п р о х о д а х по м а с с и в у п е р е ­ с т а н о в к и б о л ь ш е в ы п о л н я т ь с я не б у д у т . С л е д о в а т е л ь н о , к а к т о л ь к о к о л и ч е с т в о в ы п о л н е н н ы х на п о с л е д н е м прохо­ д е п е р е с т а н о в о к с т а н е т р а в н ы м 0, а л г о р и т м м о ж н о з а ­ канчивать. 2 Если запоминать положение (индекс) К последнего о б м е н а , то все п а р ы соседних э л е м е н т о в д а л ь ш е и н д е к с а К у ж е н а х о д я т с я в ж е л а е м о м п о р я д к е . П о э т о м у на с л е д у ­ ю щ е м проходе п р о с м о т р м о ж н о з а к а н ч и в а т ь на и н д е к ­ се К. Р : = «Истина» K:=N—1 нц п о к а Р = « И с т и н а » Р : = «Ложь» R:=K н ц д л я j от 1 до R если A [ j ] < A [ j + ' l ] то x:=A[j] A [ j ] : = A [ j + l] A[j + l ] : = x Р : = «Истина» K:=j все кц кц (2.10) В приведенном фрагменте переменная Р логического типа используется д л я определения, были перестановки или нет, а п е р е м е н н а я К — д л я х р а н е н и я и н д е к с а по76
с л е д н е г о о б м е н а . П е р е м е н н а я R я в л я е т с я г р а н и ц е й , на которой з а к а н ч и в а е т с я просмотр. Е с л и п р о а н а л и з и р о в а т ь п у з ы р ь к о в у ю с о р т и р о в к у , то м о ж н о з а м е т и т ь , что с а м о е м а л е н ь к о е ч и с л о з а н и м а е т с в о е м е с т о з а один п р о х о д по м а с с и в у , а с а м о е б о л ь ш о е п е р е м е щ а е т с я по н а п р а в л е н и ю к с в о е м у м е с т у на одну п о з и ц и ю п р и к а ж д о м п р о х о д е . Это н а в о д и т на м ы с л ь чередовать н а п р а в л е н и е проходов. Т а к а я сортировка на­ з ы в а е т с я шейкер-сортировкой. Р а с с м о т р и м ее р а б о т у н а том ж е м а с с и в е А={0, 1, 9, 2, 4, 3 , 6, 5}. (L — л е в а я граница просмотра, R — правая.) 1. 1, 9, 2, 4, 3, 6, 5, О L=l, R = 7 2. 9, 1, 6, 2, 4, 3 , 5, О L = 2, /? = 7 3. 9, 6, 2, 4, 3, 5, 1, О L = 2, R = 6 4. 9, 6, 5, 2, 4, 3 , 1, О L = 3, R = 6 5. 9, 6, 5, 4, 3, 2, 1, О L = 3, R = 5 6. 9, 6, 5, 4, 3 , 2, 1, 0 L = 4, R = 5 Алгоритм данной сортировки попытайтесь написать самостоятельно. В с е эти у л у ч ш е н и я с о к р а щ а ю т к о л и ч е с т в о о п е р а ц и й с р а в н е н и я д л я ч а с т н ы х с л у ч а е в , о д н а к о при н е б л а г о п р и ­ ятной начальной расстановке элементов массива (поду­ м а й т е к а к о й ) п р и х о д и т с я п р о д е л а т ь все (N — iV)/2 опе­ рации сравнения*. 2 Вопросы для повторения 1. На каких п р и н ц и п а х о с н о в а н а с о р т и р о в к а в ы б о р о м ? 2 . На каких п р и н ц и п а х о с н о в а н а с о р т и р о в к а о б м е н о м ? 3. За какое количество операций сравнения будет отсортиро­ ван м а с с и в , е с л и п р и м е н я т ь с о р т и р о в к у о б м е н о м ? с о р т и ­ ровку выбором? 4. Сколько перестановок будет сделано для упорядочения массива, если применять сортировку о б м е н о м ? сортировку выбором? 5 . Как м о ж н о с о к р а т и т ь в р е м я р а б о т ы а л г о р и т м а с о р т и р о в к и обменом? 6. А л г о р и т м какой из с о р т и р о в о к б у д е т работать б ы с т р е е ? Почему? 77
§ 4. СОКРАЩЕНИЕ ОБЛАСТИ д в о и ч н ы й ПОИСКА. п о и с к Рассмотрим следующую задачу. В отделение милиции аэропорта поступило сообщение о т о м , что некто п ы т а е т с я п р о в е з т и на с а м о л е т е б о м б у . Д и в е р с а н т пока н а х о д и т с я в з д а н и и а э р о п о р т а . Д о п у ­ с т и м , что в н а ш е м р а с п о р я ж е н и и и м е е т с я п р и б о р , кото­ р ы й м о ж е т о п р е д е л и т ь , есть л и б о м б а в к о м н а т е . Н е о б х о ­ д и м о к а к м о ж н о б ы с т р е е о п р е д е л и т ь , у кого н а х о д и т с я бомба. С а м ы м п р о с т ы м (и с а м ы м п р о д о л ж и т е л ь н ы м по в р е ­ мени) решением будет последовательная проверка к а ж ­ д о г о из п а с с а ж и р о в в к о м н а т е с п р и б о р о м . О д н а к о т а к о й подход в р я д л и п о м о ж е т с э к о н о м и т ь в р е м я . П о с т у п и м п о - д р у г о м у . Р а з д е л и м всех п а с с а ж и р о в на д в е н а и б о л е е р а в н ы е по ч и с л е н н о с т и г р у п п ы . Р а з в е д е м г р у п п ы по д в у м к о м н а т а м . П р и б о р с м о ж е т о п р е д е л и т ь , в к а к о й из к о м н а т н а х о д и т с я б о м б а . В р е з у л ь т а т е т а к о г о д е й с т в и я к о л и ч е с т в о п о д о з р е в а е м ы х у м е н ь ш и т с я вдвое. С оставшимися подозреваемыми поступим аналогичным о б р а з о м : р а з д е л и м их на 2 ч а с т и и р а з в е д е м по д в у м комнатам. При этом опять количество подозреваемых с о к р а т и т с я . П р о д о л ж а е м т а к , п о к а не н а й д е м д и в е р ­ санта. Т а к о й м е т о д п о и с к а н а з ы в а е т с я двоичным поиском. В с т р е ч а ю т с я и д р у г и е н а з в а н и я этого м е т о д а : бинарный поиск, логарифмический поиск, метод деления пополам, дихотомия. В программировании такой поиск применяют для нахождения элемента X в отсортированном массиве. Пусть массив отсортирован в порядке убывания. На­ х о д и м с р е д н и й э л е м е н т м а с с и в а A [m] (tn = div ( N - j - 1 , 2) и с р а в н и в а е м его с э л е м е н т о м X. Е с л и он р а в е н X, то поиск з а к а н ч и в а е т с я . Е с л и он м е н ь ш е X, то все э л е м е н т ы с и н д е к с а м и , б о л ь ш и м и или р а в н ы м и т, м о ж н о не р а с ­ с м а т р и в а т ь : е с л и ж е он б о л ь ш е X, то и с к л ю ч а ю т с я э л е м е н т ы с и н д е к с а м и , м е н ь ш и м и и л и р а в н ы м и т. 78
П р и в ы п о л н е н и и д а н н о г о а л г о р и т м а н а м п р и д е т с я на к а ж д о м ш а г е п е р е с ч и т ы в а т ь г р а н и ц ы п о и с к а . Т а к , на п е р в о м ш а г е л е в а я г р а н и ц а L = 1, п р а в а я — R = N. Н а втором ш а г е либо левая, либо п р а в а я граница поменяет свое значение. П о и с к б у д е т п р о д о л ж а т ь с я д о тех п о р , п о к а э л е м е н т не б у д е т н а й д е н , л и б о к о г д а л е в а я и п р а в а я г р а н и ц ы п о и с к а не с о в п а д у т , что с о о т в е т с т в у е т о т с у т с т в и ю э л е ­ мента в массиве. П у с т ь н а т у р а л ь н о е ч и с л о К е с т ь к о л и ч е с т в о опе­ раций сравнения, которые необходимы д л я нахожде­ ния элемента в упорядоченном массиве методом дихото­ м и и . Ч и с л о К о п р е д е л я е т с я из с л е д у ю щ е г о н е р а в е н с т в а : N-^2 , п р и ч е м К — м и н и м а л ь н о е из всех в о з м о ж н ы х . K П р и м е ч а н и е . Обычно в математике для определения числа К пользуются функцией log '. Тогда число К будет вычислено по форму­ ле / C = [ l o g N]-\-1, где квадратные скобки обозначают целую часть числа, находящегося в скобках. 2 А л г о р и т м и м е е т с л е д у ю щ и й вид: L: = l R:=N , Р : = «ложь» нц п о к а ( L < ! = R ) и ( Р = « л о ж ь » ) m : = d i v ( R + L, 2) если А [ т ] = Х то Р : = «истина» иначе если А [ т ] > Х то L:=m+1 иначе | R:=m—1 все все кц (2.11) 'Если 2° = 6, то l o g 6 = a. 2 79
После выполнения алгоритма в переменной т будет х р а н и т ь с я н о м е р н а й д е н н о г о э л е м е н т а , если он есть в массиве (Р = «истина»). П р и м е р . В м а с с и в е А н а й т и э л е м е н т х: А (9, 6, 5, 4, 3, 2, 1, 0); x=\ 1) L = 1; 2) L = 5; 3) /. = 7; = 8; R = 8; R = 8; m= 4 m= 6 m = 7; Л [4] = 4; Л [6] = 2; Л [7] = 1; А (9, 8, 7, 6, 5, 4, 3 , 2; 0); 1) 2) 3) 4) 5) L= L= L= 1 = L= l; 6; 8; 9; 9; /г = = R = R = R = 9; 9; 9; 9; 8; m= 5 m= 7 m = 8 m= 9 L>/*; 4 > 1 ; Р = «ложь» 2 > 1 ; Р = «ложь» 1 = 1; Р = «истина x=l Л Л Л Л [5] [7] [8] [9] = 5; = 3; = 2; = 0; 5 3 2 0 > > > < 1 1 1 1 ; ; ; ; Р Р Р Р = «ложь» = «ложь» = «ложь» = «ложь» Р = «ложь» Л (9, 8, 7, 6,- 5, 4, 3, 2, 0); х = 7 1) L = l ; 2) L = l; 3) L = 3; Я = 9; R = 4; R = 4; x m — b m= 2 m = 3 Л [5] = 5; Л [2] = 8; Л [ 3 ] = 7; 5 < 7 ; Р = «ложь» 8 > 7 ; Р = «ложь» 7 = 7; Р = «истина М о ж н о н е с к о л ь к о с о к р а т и т ь з а п и с ь а л г о р и т м а , если как и в случае линейного поиска попытаться упростить составное условие цикла ПОКА. L: = 1 R:=N н ц пока ( L < R ) m: = d i v ( R + L , если A [ m ] > X то L:=m+1 иначе | R:=m все кц 80 2) (2.12)
если A [ R ] = X то Р:=«истина» иначе | Р : = «ложь» все После выполнения цикла к переменной R хранится н о м е р э л е м е н т а , р а в н о г о X, е с л и т а к о й э л е м е н т в м а с с и ­ ве е с т ь . Е с л и э л е м е н т а нет, то п е р е м е н н а я R п о к а з ы в а е т н о м е р м е с т а в м а с с и в е , к у д а м о ж н о в с т а в и т ь э л е м е н т X, не н а р у ш а я у п о р я д о ч е н н о с т и м а с с и в а . Вопросы для повторения 1. В каких с л у ч а я х м о ж н о и с п о л ь з о в а т ь м е т о д д в о и ч н о г о п о ­ иска? П р и в е д и т е п р и м е р ы и з ж и з н и . 2 . В ч е м с у т ь м е т о д а д в о и ч н о г о поиска? 3 . П о ч е м у а л г о р и т м (2.12) б у д е т р а б о т а т ь б ы с т р е е , ч е м а л г о ­ р и т м (2.11)? § 5*. ДРУГИЕ ВИДЫ СОРТИРОВОК Все сортировки, рассмотренные раньше, требуют (N — N)/2 о п е р а ц и й с р а в н е н и я , или, д р у г и м и с л о в а м и , п о р я д к а N о п е р а ц и й . И с п о л ь з у я д и х о т о м и ч е с к и й поиск, количество операций сравнения можно сократить. 2 2 5 . 3 . Сортировка вставками Будем п р о с м а т р и в а т ь элементы массива Л, н а ч и н а я со в т о р о г о . К а ж д ы й н о в ы й э л е м е н т A [i] б у д е м в с т а в л я т ь на п о д х о д я щ е е м е с т о в у ж е у п о р я д о ч е н н у ю с о в о к у п н о с т ь Л [1], Л 17 — 1 ]. Это место о п р е д е л я е т с я п о с л е д о в а ­ т е л ь н ы м и с р а в н е н и я м и э л е м е н т а Л [/] с у п о р я д о ч е н н ы м и э л е м е н т а м и Л [1], Л [i—1]. Такой метод сортировки н а з ы в а е т с я сортировкой про­ стыми вставками. Он т а к ж е требует порядка N опера­ ций с р а в н е н и я и с т о л ь к о ж е п е р е с т а н о в о к э л е м е н т о в в массиве. Попытайтесь составить алгоритм метода са­ мостоятельно. 2 81
Если д л я поиска места элемента А Щ в упорядо­ ч е н н у ю с о в о к у п н о с т ь А [1], A [i— 1] в о с п о л ь з о в а т ь с я м е т о д о м д в о и ч н о г о п о и с к а , то к о л и ч е с т в о о п е р а ц и й с р а в ­ н е н и я б у д е т п о р я д к а N l o g N, что с у щ е с т в е н н о м е н ь ш е чем N . К о л и ч е с т в о ж е п е р е с т а н о в о к б у д е т п о р я д к а N . Т а к о й м е т о д с о р т и р о в к и н а з ы в а е т с я сортировкой би­ нарными вставками. 2 2 2 Алгоритм сортировки бинарными н ц д л я i от 2 д о N R:=i L: = l нц пока L < R r n : = d i v ( L + R, 2) е с л и A [ m ] > A [i] то L:=m+1 иначе |R:=m все кц k: = R x:=A[i] н ц д л я j от i до к -f-1 ш а г |A[j]:=A[j-I] . кц вставками: (2.13) —1 А[к]:=х КЦ Ц и к л П О К А L<R — ц и к л п о и с к а м е с т а -вставки. О н о с н о в а н на м е т о д е д в о и ч н о г о п о и с к а . ( С р а в н и с а л г о ­ р и т м о м 2.12.) Ц и к л Д Л Я / О Т i Д О k+l ШАГ—1 сдвигает элементы для освобождения места вставки. Пример. (Элемент, который вставляем, подчеркнут.) 1. 1, 9, 2, 4, 3 , 6, 5, О 2. 9, 1, 2, 4, 3, 6, 5, О 3. 9, 2, 1, 4, 3 , 6, 5, О 4. 9, 4, 2, 1, 3 , 6, 5, О 82
5. 6. 7. 8. 9, 9, 9, 9, 4, 6, 6, 6, 3, 4, 5, 5, 2, 3, 4, 4, 1, 2, 3, 3, 6, 1, 2, 2, 5, О 5, О 1, О 1, О 5.2. С о р т и р о в к а слияниями Сначала рассмотрим следующую задачу: Есть два отсортированных в порядке невозрастания м а с с и в а A [I..N] и В [1..М]. П о л у ч и т ь о т с о р т и р о в а н н ы й по н е в о з р а с т а н и ю м а с с и в C[l..N + М], с о с т о я щ и й из э л е ­ м е н т о в м а с с и в о в А и В ( « с л и т ь » в м е с т е м а с с и в ы А и В). Можно в массив С записать сначала элементы масси­ в а А, з а т е м м а с с и в а В, з а т е м п р и м е н и т ь л ю б о й а л г о р и т м с о р т и р о в к и . Н о в этом с л у ч а е мы не и с п о л ь з у е м того, что А и В у ж е отсортированы. Будем п р о с м а т р и в а т ь эле­ м е н т ы м а с с и в о в Л и В , н а ч и н а я с Л [ 1 ] и В [1]. Е с л и , н а п р и м е р , Л [ 1 ] > В [ 1 ] , то С [ 1 ] : = Л ' [ 1 ] , и на с л е д у ю щ е м ш а г е с р а в н и в а е м у ж е Л [2] и В [1], з а н о с я б о л ь ш и й э л е м е н т п а р ы в я ч е й к у С [2], и т. д . Запись алгоритма: Ai: = l Bi: = l Ci: = l : т е к у щ и е и н д е к с ы в м а с с и в а х А, В, С н ц пока Ci < = N + М если A [ A i ] > В [Bi] то C[Ci]:=A[Ai] Ai:=Ai + l иначе C[Ci]:=B[Bi] Bi:=Bi + l все Ci:=Ci+l если ( A i > N ) ' (2.14) и ( C i o N + M) : П р о в е р к а о к о н ­ чания одного из массивов 83
то н ц д л я i от Bi до М C[Ci]:=B[i] Ci:=Ci+l кц все если ( B i > M ) и ( C i O N + M ) то н ц д л я i от Ai д о N C[Ci]:=A[i] Ci:=Ci+l кц все кц П р и решении данной з а д а ч и мы выполнили «слия­ ние» д в у х о т с о р т и р о в а н н ы х м а с с и в а в о д и н . К о л и ч е с т в о операций сравнения, которые понадобились д л я получе­ ния упорядоченного массива, р а в н о N-\-M. Н а приведенном алгоритме основывается сортировка слияниями. 1. Р а з о б ь е м в с е э л е м е н т ы м а с с и в а на п а р ы ( г р у п п ы ) и упорядочим элементы в парах. Если последнему эле­ м е н т у нет п а р ы , то он п р о с т о о с т а е т с я на с в о е м месте, образуя отдельную группу. 2. В ы п о л н и м « с л и я н и е » с о с е д н и х упорядоченных г р у п п чисел, п о л у ч е н н ы х на п р е д ы д у щ е м ш а г е ( п е р в о й и в т о р о й , т р е т ь е й и ч е т в е р т о й и т. д.; если», к о л и ч е с т в о г р у п п нечетное, то с п о с л е д н е й г р у п п о й ничего не д е л а ­ ем). Д л я «слияния» придется воспользоваться вспомога­ т е л ь н ы м м а с с и в о м . К о л и ч е с т в о э л е м е н т о в во всех г р у п ­ пах, за исключением, может быть, последней, равно четырем. 3. В ы п о л н и м « с л и я н и е » с о с е д н и х упорядоченных г р у п п ч и с е л , п о л у ч е н н ы х на п р е д ы д у щ е м ш а г е . П о л у ч и м упорядоченные группы элементов массива, содержащие по в о с е м ь ч и с е л , к р о м е , м о ж е т б ы т ь , п о с л е д н е й г р у п п ы . 84
4. П р о д о л ж а е м д е й с т в о в а т ь т а к и м о б р а з о м д о тех п о р , п о к а не п о л у ч и м д в е о т с о р т и р о в а н н ы е ч а с т и м а с с и ­ ва, которые после слияния и дадут упорядоченный массив. Алгоритм сортировки с л и я н и я м и т а к ж е имеет н а з в а ­ ние а л г о р и т м а фон Н е й м а н а . Алгоритм метода запишите самостоятельно. Алгоритм сортировки слияниями требует порядка N\og N операций сравнения и столько же перестановок элементов. Данный алгоритм является самым быстрым из всех р а с с м о т р е н н ы х в ы ш е а л г о р и т м о в с о р т и р о в о к (проверьте!). Р а с с м о т р и м р а б о т у а л г о р и т м а н а п р и м е р е м а с с и в а 1, 9, 2, 4, 3, 6, 5, 0, 7, 11, 8. ( С о р т и р у е м м а с с и в в п о р я д к е убывания.) 1. UA, 2 ^ 4 , 3 J 5 , 5 J ) , 7, 11, 8 2. 9, 1, 4, 2, 6, 3, 5, 0, 11, 7, 8 9, 4, 2, 1, 6, 5, 3, 0, 11, 8, 7 9, 6, 5, 4, 3, 2, 1, 0, 11, 8, 7 5. 11, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 2 ЗАДАЧИ ДЛЯ ПОВТОРЕНИЯ 1. Д а н л и н е й н ы й м а с с и в Л[1..ЛГ], с о д е р ж а щ и й ц е л ы е числа. Определить: а ) и м е е т с я л и в м а с с и в е хотя б ы одно ч и с л о с у к а ­ занными ниже свойствами; б) п о с ч и т а т ь к о л и ч е с т в о ч и с е л , к о т о р ы е 1) я в л я ю т с я п о л о ж и т е л ь н ы м и ; 2) я в л я ю т с я н е ч е т н ы м и ; 3) о т л и ч н ы от А (К); К в в о д и т с я ; 4) д е л я т с я на 3 и на 5; 5) д е л я т с я на 7 и не д е л я т с я на 4; 6) п р и д е л е н и и н а 3 и н а 5 д а ю т о д и н а к о в ы е остатки; 7) п р и д е л е н и и на 7 д а ю т в о с т а т к е 1, 2 или 3; 8) я в л я ю т с я к в а д р а т о м ц е л о г о ч и с л а ; 9) я в л я ю т с я с т е п е н ь ю 5. 85
2. Д а н л и н е й н ы й м а с с и в A [I..N], с о д е р ж а щ и й ц е л ы е числа. Определить, сколько в нем соседств 1) д в у х п о л о ж и т е л ь н ы х ч и с е л ; 2) д в у х р а з н ы х ч и с е л ; 3) д в у х н е ч е т н ы х ч и с е л ; 4) д в у х н у л е в ы х э л е м е н т о в ; 5) д в у х чисел одного з н а к а , п р и ч е м м о д у л ь п е р в о ­ го д о л ж е н б ы т ь б о л ь ш е м о д у л я в т о р о г о ; 6) т р е х у п о р я д о ч е н н ы х по н е у б ы в а н и ю ч и с е л . 3. Д а н л и н е й н ы й м а с с и в A[l..N], содержащий целые числа. Получить те элементы массива, индексы которого являются 1) с т е п е н я м и д в о й к и ; 2) п о л н ы м и к в а д р а т а м и ; 3) ч и с л а м и Ф и б о н а ч ч и . 4. Д а н л и н е й н ы й м а с с и в A [I..N], с о д е р ж а щ и й ц е л ы е числа. 1) О п р е д е л и т ь , с к о л ь к о р а з в с т р е ч а е т с я м а к с и м а л ь ­ ный э л е м е н т в э т о м м а с с и в е . 2) П о л у ч и т ь те э л е м е н т ы м а с с и в а , к о т о р ы е н а х о д я т с я между минимальным и максимальным. 3) Н а й т и д л и н у н а и м е н ь ш е г о о т р е з к а ч и с л о в о й п р я ­ мой, с о д е р ж а щ е г о все э л е м е н т ы м а с с и в а . 4) Н а й т и м и н и м а л ь н ы й , м а к с и м а л ь н ы й , н а и м е н ь ш и й больше минимального, наибольший меньше мак­ с и м а л ь н о г о з а один п р о с м о т р м а с с и в а . 5. Д а н л и н е й н ы й м а с с и в A[l..N], содержащий целые ч и с л а . П о с ч и т а т ь в нем 1) н а и б о л ь ш е е к о л и ч е с т в о о д и н а к о в ы х ч и с е л ; 2) к о л и ч е с т в о р а з л и ч н ы х ч и с е л . 6. П р и п о с т у п л е н и и в и н с т и т у т л и ц а , п о л у ч и в ш и е д в о й к у на п е р в о м э к з а м е н е , ко в т о р о м у не д о п у ­ с к а ю т с я . С ч и т а я ф а м и л и и а б и т у р и е н т о в и их о ц е н к и после первого экзамена исходными данными, составить с п и с о к а б и т у р и е н т о в , д о п у щ е н н ы х ко в т о р о м у э к з а м е н у . 7. Д а н п р я м о у г о л ь н ы й чить н о м е р 86 м а с с и в A [l.JW, I..N]. Полу­
1) столбца, содержащего максимальный элемент; 2) с т р о к и , с о д е р ж а щ е й м и н и м а л ь н ы й э л е м е н т ; 3) с т о л б ц а , с у м м а э л е м е н т о в к о т о р о г о м а к с и м а л ь н а ; 4) с т р о к и , с у м м а э л е м е н т о в к о т о р о й м и н и м а л ь н а . 8. Д а н п р я м о у г о л ь н ы й м а с с и в A [l..Af, I..N]. П о л у ­ чить н о м е р а 1) с т р о к , в к о т о р ы х есть р а в н ы е э л е м е н т ы ; 2) с т р о к , с у м м ы э л е м е н т о в в к о т о р ы х р а в н ы . 9. Д а н п р я м о у г о л ь н ы й м а с с и в А [\..М, I..N]. П о л у ­ чить л и н е й н ы й м а с с и в В, в к о т о р о м 1) B[i] — м а к с и м а л ь н ы й э л е м е н т /-Й с т р о к и м а с с и в а A (i и з м е н я е т с я от 1 до М); 2) В [i] — м и н и м а л ь н ы й э л е м е н т г-го с т о л б ц а м а с с и в а A (i и з м е н я е т с я от 1 до N). 10. Д а н л и н е й н ы й м а с с и в A [1..N], с о д е р ж а щ и й ц е л ы е ч и с л а . О т с о р т и р о в а т ь его 1 ) методом «пузырька» в порядке возрастания; 2) м е т о д о м « п у з ы р ь к а » в п о р я д к е в о з р а с т а н и я мо­ дулей; 3) м е т о д о м в ы б о р а , п р и п о м о щ и поиска м и н и м а л ь ­ ного э л е м е н т а в п о р я д к е в о з р а с т а н и я ; 4) м е т о д о м в ы б о р а п р и п о м о щ и п о и с к а о д н о в р е м е н ­ но м и н и м а л ь н о г о и м а к с и м а л ь н о г о э л е м е н т о в в по­ рядке возрастания; 5) п е р е с т а в и в все н у л е в ы е э л е м е н т ы в к о н е ц м а с с и ­ ва; порядок ненулевых — произвольный; 6) т а к , чтобы все ч е т н ы е э л е м е н т ы с т о я л и в н а ч а л е массива, а нечетные — в конце; 7) т а к , ч т о б ы все п о л о ж и т е л ь н ы е э л е м е н т ы с т о я л и в начале массива, отрицательные — в середине, а нули — в конце; 8 ) т а к , чтобы все п о л о ж и т е л ь н ы е э л е м е н т ы с т о я л и в начале массива, а отрицательные — в конце (относительный порядок следования элементоз должен сохраниться); 9) в п о р я д к е в о з р а с т а н и я к о л и ч е с т в а ц и ф р в ч и с л а х , входящих в массив (сначала однозначные, затем 87
д в у з н а ч н ы е и т. д.); п о р я д о к р а с п о л о ж е н и я ч и с е л с одинаковым количеством цифр должен сохра­ ниться неизменным; 10) в п о р я д к е в о з р а с т а н и я к о л и ч е с т в а ц и ф р в ч и с л а х , входящих в массив (сначала однозначные, затем д в у з н а ч н ы е и т. д.); ч и с л а с о д и н а к о в ы м к о л и ­ чеством ц и ф р р а с п о л а г а ю т с я в п о р я д к е у б ы ­ вания. 11. И м е ю т с я в е с ы б е з г и р ь и ч е т ы р е р а з л и ч н ы х гру­ з а . Н а к а ж д у ю из д в у х ч а ш е к в е с о в м о ж н о к л а с т ь по о д н о м у г р у з у . Р а з л о ж и т ь г р у з ы по убыванию массы, использовав пять взвешиваний. 12. Д а н п р я м о у г о л ь н ы й м а с с и в Л [ 1 . . М , I..N]. П о л у ­ чить н о м е р а 1) с т р о к , э л е м е н т ы к о т о р ы х р а с п о л о ж е н ы в в о з р а с т а ­ ющем порядке; 2) с т о л б ц о в , э л е м е н т ы к о т о р ы х р а с п о л о ж е н ы в у б ы ­ вающем порядке; 3) с т о л б ц о в , э л е м е н т ы к о т о р ы х я в л я ю т с я ч а с т ь ю по­ следовательности Фибоначчи; 4) с т р о к , э л е м е н т ы к о т о р ы х я в л я ю т с я п о с л е д о в а т е л ь ­ ными степенями двойки. 13. Ф а м и л и и у ч а с т н и к о в с о р е в н о в а н и й по ф и г у р н о м у к а т а н и ю п о с л е к о р о т к о й п р о г р а м м ы р а с п о л о ж е н ы в по­ р я д к е , с о о т в е т с т в у ю щ е м з а н я т о м у месту. С о с т а в и т ь спи­ сок с т а р т о в ы х н о м е р о в у ч а с т н и к о в д л я п р о и з в о л ь н о й программы (участники выступают в порядке, обратном занятым местам). 14. Д а н о т с о р т и р о в а н н ы й в п о р я д к е в о з р а с т а н и я л и ­ н е й н ы й м а с с и в Л[1..ЛГ]. 1) О п р е д е л и т ь , и м е е т с я л и в д а н н о м м а с с и в е число, равное среднему арифметическому элементов мас­ сива. 2) В с т а в и т ь в д а н н ы й м а с с и в н е к о т о р о е ч и с л о X т а к , чтобы упорядоченность массива сохранилась. 15. Т а б л и ц а в ы и г р ы ш е й л о т е р е и п р е д с т а в л е н а в в и д е д в у х м а с с и в о в A [I..N] и C[\..N]. В м а с с и в е А, у п о р я д о 88
ч е н н о м по у б ы в а н и ю , х р а н я т с я в ы и г р ы ш н ы е н о м е р а , а в м а с с и в е С — в ы и г р ы ш и в р у б л я х , в ы п а в ш и е со­ о т в е т с т в е н н о на н о м е р а Л [1], Л [2], Л [Щ. Т р е б у е т с я н а й т и в ы и г р ы ш и , в ы п а в ш и е на р я д н о м е р о в , х р а н я щ и х с я в м а с с и в е В[1..М] ( е с л и н о м е р а нет в т а б л и ц е , в ы и г р ы ш считается р а в н ы м нулю). 16. З а д а н ы м а с с и в ы Л [1.JV] и В [1..М]. М а с с и в Л у п о ­ р я д о ч е н по у б ы в а н и ю . П о д с ч и т а т ь к о л и ч е с т в о тех В [i], l ^ i ^ M , д л я к о т о р ы х нет р а в н ы х с р е д и э л е м е н т о в массива Л. 17. З а д а н м а с с и в Л [1..ЛП,. П о л у ч и т ь в п о р я д к е в о з р а ­ с т а н и я в с е р а з л и ч н ы е ч и с л а , в х о д я щ и е в м а с с и в А. 18. Л ы ж н ы е г о н к и п р о в о д я т с я д в у м я г р у п п а м и по 10 человек. Р е з у л ь т а т ы соревнований представлены спис­ к а м и у ч а с т н и к о в по к а ж д о й г р у п п е , в п о р я д к е з а н я т ы х ими мест. Необходимо получить общий список, в котором участники расположены в порядке, соответствующем показанным результатам. 19. С о р е в н о в а н и я по п л а в а н и ю п р о в о д я т с я о т д е л ь н о в Е в р о п е и А м е р и к е . Р е з у л ь т а т ы 100 л у ч ш и х с п о р т с м е ­ нов к а ж д о г о континента представлены в виде таблиц, с о д е р ж а щ и х в порядке з а н я т ы х мест ф а м и л и и спортсме­ н о в и их р е з у л ь т а т ы . С о с т а в и т ь с п и с о к 100 л у ч ш и х спортсменов мира в порядке, определяемом результа­ тами. 20. В п а м я т и Э В М х р а н и т с я с п и с о к ф а м и л и й а б о ­ н е н т о в в а л ф а в и т н о м п о р я д к е и н о м е р а их т е л е ф о н о в . Составить программу, обеспечивающую быстрый поиск а б о н е н т а по н о м е р у т е л е ф о н а . 21. В памяти Э В М хранятся списки номеров телефо­ нов и ф а м и л и й а б о н е н т о в , у п о р я д о ч е н н ы е по н о м е р а м т е л е ф о н о в , д л я к а ж д о г о из п я т и т е л е ф о н н ы х у з л о в горо­ д а . Один телефонный узел включает несколько АТС (не б о л е е 10). Н о м е р а А Т С ( п е р в ы е д в е ц и ф р ы н о м е р а телефона), относящиеся к каждому телефонному узлу, т а к ж е хранятся в упорядоченном виде в памяти ЭВМ. Составить программу, обеспечивающую быстрый поиск ф а м и л и и а б о н е н т а по з а д а н н о м у н о м е р у т е л е ф о н а . 89
2 2 . Д а н ы N монет, с р е д и к о т о р ы х о д н а ф а л ь ш и в а я . О п р е д е л и т ь ф а л ь ш и в у ю монету с помощью чашечных весов б е з г и р ь за м и н и м а л ь н о е к о л и ч е с т в о в з в е ш и в а н и й , если ф а л ь ш и в а я м о н е т а 1) т я ж е л е е о с т а л ь н ы х ; 2) л е г ч е о с т а л ь н ы х ; 3) о т л и ч а е т с я от о с т а л ь н ы х по м а с с е и п р и этом не и з в е с т н о — т я ж е л е е о н а или л е г ч е н а с т о я щ е й мо­ неты. 2 3 . Н е к т о з а д у м а л ч и с л о из п р о м е ж у т к а [0, 100]. О н м о ж е т п р а в д и в о о т в е ч а т ь « д а » или «нет» на з а д а в а е м ы е ему вопросы. К а к и е вопросы нужно з а д а в а т ь , чтобы о т г а д а т ь з а д у м а н н о е число за минимальное количество попыток. ЗАДАЧИ ПОВЫШЕННОЙ СЛОЖНОСТИ 1. З а д а й м а с с и в чисел A[l..N, 1..М], у п о р я д о ч е н н ы й по в о з р а с т а н и ю по с т р о к а м и по с т о л б ц а м , т а к что A[i, l]<A[i, 2 ] < . . . < Л [ г , М] ( п р и всех i), А [ 1 , / ] < Л [ 2 , / ] < . . . < Л [N, у] ( п р и всех j ) . Н а й т и и н д е к с ы (/, / ) э л е м е н т а м а с с и в а , р а в н о г о з а ­ д а н н о м у ч и с л у X, или н а п е ч а т а т ь с л о в о «нет», е с л и т а к о г о э л е м е н т а не о к а ж е т с я . 2. З а д а н м а с с и в A[l..N, I..N], э л е м е н т ы к о т о р о г о р а в н ы 0 или 1, п р и ч е м Л [i, i] = 0 д л я л ю б о г о и Н е о б х о д и ­ мо н а й т и , е с л и они есть, т а к и е с т р о к у ц и с т о л б е ц / , ч т о б ы в с т о л б ц е / б ы л и все 0, а в с т р о к е i — все 1 ( к р о ­ ме э л е м е н т а A [i , i ], р а в н о г о 0). 3. Н а п л о с к о с т и с в о и м и к о о р д и н а т а м и з а д а е т с я в ы ­ п у к л ы й iV-угольник. К о о р д и н а т ы iV-угольника ц е л о ч и с л е н н ы и п е р е ч и с л я ю т с я в п о р я д к е о б х о д а по к о н т у р у . В в о д я т с я к о о р д и н а т ы т о ч к и (х; у). О п р е д е л и т ь а) является ли она вершиной ^ - у г о л ь н и к а ; б) п р и н а д л е ж и т л и она iV-угольнику. 4 . Н а к а ж д о й из д в у х п а р а л л е л ь н ы х п р я м ы х с л е в а н а п р а в о з а д а н ы по N точек ( р и с . 28). 0 0 0 90 0 0
Их координаты хранятся в массивах А и В [I..N]. Точки с одинаковыми номе­ рами соединены отрезками. Т а к и м образом, полоса меж­ д у п р я м ы м и р а з б и в а е т с я на Рис. 28 N — 1 конечную и 2 беско­ нечные трапеции. Расстояние м е ж д у п р я м ы м и единич­ ное. В в о д и т с я т о ч к а (х; у), 0 < г у < 1. О п р е д е л и т ь , в к а к о й из т р а п е ц и й л е ж и т т о ч к а . 5. В в о д и т с я п о с л е д о в а т е л ь н о с т ь из N н а т у р а л ь н ы х ч и с е л . О п р е д е л и т ь н а и м е н ь ш е е н а т у р а л ь н о е ч и с л о , от­ сутствующее в последовательности. 6. Н а д л и н н о й п е р ф о л е н т е з а п и с а н ы N п о п а р н о р а з ­ личных положительных целых чисел. В а ш а Э В М может п е р е м а т ы в а т ь л е н т у на н а ч а л о и с ч и т ы в а т ь ч и с л а одно за другим. Внутренняя память Э В М может хранить только несколько целых чисел. Требуется найти наимень­ ш е е п о л о ж и т е л ь н о е ц е л о е ч и с л о , к о т о р о г о нет на л е н т е . Опишите алгоритм, который сделает это за небольшое количество перемоток ленты. 7. Н а с т о л е в д в у х с т о л б и к а х л е ж а т 64 з о л о т ы е и 64 серебряные монеты соответственно. К а к серебря­ н ы е , т а к и з о л о т ы е м о н е т ы у п о р я д о ч е н ы по у б ы в а н и ю м а с с ( с а м а я т я ж е л а я — вверху, с а м а я л е г к а я — внизу). М а с с ы всех монет р а з н ы е . К а к о е н а и м е н ь ш е е к о л и ч е с т в о в з в е ш и в а н и й н е о б х о д и м о д л я о п р е д е л е н и я 64-й м о н е т ы в п о р я д к е у б ы в а н и я м а с с с р е д и всех 128 монет? ( З а один р а з можно взвешивать две монеты.) 8. З а д а н о N н а б о р о в монет и з р а з л и ч н ы х с т р а н . Н а б о р ы у п о р я д о ч е н ы по н е в о з р а с т а н и ю м а с с ы монет. В 1-м н а б о р е а, м о н е т . О п р е д е л и т ь з а к а к м о ж н о м е н ь ш е е ч и с л о в з в е ш и в а н и й на ч а ш е ч н ы х в е с а х k-ю по м а с с е м о н е т у с р е д и всех монет. 9. З а д а н ы м а с с и в ы A[l..N] и В[1..М]. Найти такие и н д е к с ы i и / , что 0 0 А[Ю] + В[/0] = m a x (A[i] + где 1< / < М , В[/]), /</. 91
10. Р е ш и т ь у р а в н е н и е f(x) = 0 на п р о м е ж у т к е [а, Ь], на к о т о р о м ф у н к ц и я f(х) я в л я е т с я монотонной и н е п р е ­ рывной. Корень найти с точностью п знаков после за­ пятой. 11. В р о м а н е N г л а в . В г'-й г л а в е а, с т р а н и ц . Т р е б у ­ ется издать роман в К томах так, чтобы объем самого толстого тома был минимален. Описать алгоритм, отве­ ч а ю щ и й на в о п р о с , к а к и м б у д е т о б ъ е м V с а м о г о т о л с т о г о тома. Делить и переставлять главы нельзя. 12. И м е е т с я N к а м н е й м а с с о й Л , , Л , A . Необхо­ д и м о р а з б и т ь их на д в е кучи т а к и м о б р а з о м , чтобы м а с с ы куч о т л и ч а л и с ь не б о л е е чем в 2 р а з а . В ы д а т ь с о о б щ е н и е , е с л и этого с д е л а т ь н е л ь з я . 13. У с л о в и е з а д а ч и 12, т о л ь к о м а с с ы куч о т л и ч а ю т с я не б о л е е чем в 1,5 р а з а . 14. Д а н ы д в е ц е л о ч и с л е н н ы е т а б л и ц ы Л [ 1 . . 1 0 ] и В[1..15]. Р а з р а б о т а т ь алгоритм и написать программу, к о т о р а я п р о в е р я е т , я в л я ю т с я л и эти т а б л и ц ы п о х о ж и м и . ( Д в е таблицы называются похожими, если совпадают множества чисел, встречающихся в этих таблицах.) 15. З а д а е т с я с л о в а р ь . Н а й т и в нем все а н а г р а м м ы ( с л о в а , с о с т а в л е н н ы е из одних и тех ж е б у к в ) . 16. Н а п р я м о й о к р а с и л и N о т р е з к о в . И з в е с т н ы коор­ д и н а т а L [i] л е в о г о к о н ц а и к о о р д и н а т а R[i] п р а в о г о к о н ц а i-ro о т р е з к а д л я ( = 1, N. Н а й т и с у м м у д л и н всех о к р а ш е н н ы х ч а с т е й п р я м о й . 2 N П р и м е ч а н и е . Число N столь велико, что на выполнение N даже простейших операций не хватит времени. 2 М о д и ф и к а ц и я . Н а о к р у ж н о с т и о к р а с и л и N дуг. И з в е с т н ы у г л о в а я к о о р д и н а т а L [г] н а ч а л а и R [i] к о н ц а /'-й дуги (от н а ч а л а к к о н ц у д в и г а л и с ь , з а к р а ш и в а я дугу, против часовой стрелки). К а к а я доля окружности окра­ шена? 17. И м е е т с я 2N чисел. И з в е с т н о , что их м о ж н о р а з ­ б и т ь на п а р ы т а к и м о б р а з о м , что п р о и з в е д е н и е чисел 92
в парах равны. Сделать разбиение, если числа: а) нату­ ральные; б) целые. 18. И м е ю т с я ч и с л а Л ] , А , и В, В, В^. С о с т а в и т ь из них N п а р (Л,-, В/) т а к и м о б р а з о м , ч т о б ы сумма произведений пар была максимальна (минималь­ н а ) . К а ж д о е Л,- й В в п а р а х в с т р е ч а ю т с я р о в н о по о д н о м у разу. 19. У п о р я д о ч и т ь по н е в о з р а с т а н и ю 5 чисел з а 7 опе­ раций сравнения. 20. П у с т ь Л — м н о ж е с т в о и з N н а т у р а л ь н ы х ч и с е л . В а ш а п р о г р а м м а д о л ж н а о п р е д е л и т ь , с у щ е с т в у е т л и по к р а й н е й м е р е одно п о д м н о ж е с т в о В м н о ж е с т в а Л , у д о в ­ л е т в о р я ю щ е е с л е д у ю щ и м у с л о в и я м д л я л ю б ы х X, Y, Z из В {ХфЧфЪфХ): Z + Y + Z < S U M { * : * из В\{Х, Y, Z}}, (*) 2 х 2 ; г д е В\{Х, Y, Z} о з н а ч а е т м н о ж е с т в о В б е з э л е м е н т о в X, Y и Z, S U M — с у м м а э л е м е н т о в с о о т в е т с т в у ю щ е г о мно­ жества. В случае положительного ответа программа д о л ж н а н а й т и п о д м н о ж е с т в о В, у д о в л е т в о р я ю щ е е у с л о в и ю (*) и с о с т о я щ е е из м а к с и м а л ь н о в о з м о ж н о г о ментов. 21. Д а н о положительное целое число К чисел Л,, А . Вычислить значение суммы = A -\-A + ...+A _ + A , где 1 < M < N а) наибольшее; б) н а и м е н ь ш е е ; в) н а и б о л е е б л и з к о е к н у л ю ; г) н а и б о л е е б л и з к о е к з а д а н н о м у ч и с л у к M M+l N x N числа эле­ я К целых S(M, N) — < / T : Р. П р и м е ч а н и е . Число К столь велико, что числа А А , А занимают примерно пятую часть памяти, отводимой для хранения данных, а на выполнение К даже простейших операций не хватает времени. и 2 к 2 22. Д а н ы целые числа М и N и массив действитель­ н ы х чисел X[l..N]. Н а й т и ц е л о е ч и с л о i (l^i^.N — М), д л я к о т о р о г о с у м м а Л' [г]-f-... + X [i; + М] б л и ж е в с е г о к н у л ю по м о д у л ю . 93
2 3 . Д а н м а с с и в X[l..N]. Необходимо циклически с д в и н у т ь его на k э л е м е н т о в в л е в о (т. е. э л е м е н т X [i] п о с л е с д в и г а д о л ж е н с т о я т ь на м е с т е X[i — k\, тут мы с ч и т а е м , что з а ^ [ 1 ] с л е д у е т Х[Щ). Р а з р е ш а е т с я и с п о л ь ­ зовать только несколько дополнительных переменных (дополнительного массива заводить нельзя!). ЗАДАЧИ ДЛЯ САМОСТОЯТЕЛЬНОГО 1. Ч е м у б у д у т р а в н ы х х и х ъ РЕШЕНИЯ е с л и : a ) x , = = P ( l . О, 2. 0), б) x = P ( 3 . 0, 4. 0)? 2 А л г в е щ Р ( в е щ а, Ь) нач вещ с с : = (Ь — а ) / 3 + а е с л и A B S (Ь — а ) < 0 . 0 0 0 1 | то з н а ч : = с иначе если s i n ( a ) * s i n ( c ) < ; 0 | то з н а ч : = Р ( а , с) иначе | з н а ч : = Р ( с , Ь) все все кон 2. О п р е д е л и т ь , м о ж н о л и п р е д с т а в и т ь з а д а н н о е н а т у ­ ральное число в виде произведения четырех последова­ т е л ь н ы х н а т у р а л ь н ы х ч и с е л . Д л и н а числ,а не б о л е е 250 с и м в о л о в . К о н е ц ч и с л а — п р о б е л . 3. Написать программу, которая в двумерном мас­ с и в е A[l..N, 1..М] ц е л ы х ч и с е л , т а к о м , что д л я всех 1 < л ^ i V , l ^ / ^ A f — 1 в ы п о л н я е т с я A [i, j\>A [i,/+ 1] и д л я всех 1 N — 1 в ы п о л н я е т с я A [i, М]>А [j-f- 1, М], н а х о д и т все э л е м е н т ы A[i, / ] , р а в н ы е / + "'> или у с т а ­ н а в л и в а е т , что т а к и х э л е м е н т о в нет. 4. Н а п и с а т ь п р о г р а м м у , к о т о р а я в д в у м е р н о м м а с ­ с и в е Л [I..N, 1..М] ц е л ы х ч и с е л , т а к о м , что д л я всех 94
1 s^isS^Af, 1 / < : Af — 1 в ы п о л н я е т с я A [i, / ] < Л [i, / - j - 1 ] и д л я всех 1 ^ i ^ / V — 1 в ы п о л н я е т с я A [i, M]<A [i+l, M], н а х о д и т в с е э л е м е н т ы A [i, j], р а в н ы е / + г, или у с т а ­ н а в л и в а е т , ч т о т а к и х э л е м е н т о в нет. 5. Н а п р я м о й с в о и м и к о н ц а м и з а д а н ы JV о т р е з к о в и т о ч к а X. О п р е д е л и т ь , п р и н а д л е ж и т л и т о ч к а м е ж о т р е з о ч н о м у и н т е р в а л у . Е с л и д а , то у к а з а т ь к о н ц е в ы е т о ч к и э т о г о и н т е р в а л а . Е с л и нет, то н а й т и : а ) к а к о м у к о л и ч е ­ ству отрезков п р и н а д л е ж и т точка; б) каким именно отрезкам принадлежит точка? 6. Н а п р я м о й с в о и м и к о н ц а м и з а д а н ы N о т р е з к о в . Н а й т и т о ч к у , п р и н а д л е ж а щ у ю м а к с и м а л ь н о м у ч и с л у от­ резков. 7. П у с т ь F (х) — п р о ц е д у р а , в ы ч и с л я ю щ а я з н а ч е н и е н е п р е р ы в н о й ф у н к ц и и , к о т о р а я о п р е д е л е н а н а всей д е й ­ с т в и т е л ь н о й оси. Э т а ф у н к ц и я у б ы в а е т п р и всех х м е н ь ­ ш е н е к о т о р о г о ч и с л а х и в о з р а с т а е т п р и всех х б о л ь ш е х . С о с т а в и т ь а л г о р и т м , к о т о р ы й о п р е д е л я е т х с точ­ ностью я з н а к о в после запятой. 8. Д а н п р я м о у г о л ь н ы й т р е у г о л ь н и к ABC: Z.ABC = = 9 0 ° ; Z.BAC = a° ( 0 ° < a < 9 Q ° ) . К а т е т ВС р а з д е л е н на п равных частей: 0 0 0 o \BD \ X — |D,D I 2 =•- = Ш - я А - П = IA,-iC|. К а ж д а я из т о ч е к Д ( l ^ i ^ r a — 1) с о е д и н е н а о т р е з к о м с в е р ш и н о й Л т а к и м о б р а з о м , что п о л у ч е н н ы е о т р е з к и р а з д е л я ю т у г о л ВАС н а п ч а с т е й : Z.BAD l = a\, ZDH0 =a °, ЛО _,АС 2 2 п .... / О _ Л О - , = = а°. п 2 а а„-Л Д л я введенных а (в г р а д у с а х ) и п о п р е д е л и т ь k (1 < ! й г ^ п ) , д л я к о т о р о г о з н а ч е н и е в ы р а ж е н и я \а — а/п\ б у д е т н а и ­ меньшим. 9. В т р е у г о л ь н о м к о р о л е в с т в е , р а с п о л о ж е н н о м м е ж д у т р е м я п и р а м и д а м и , где-то под п ы л ь ю столетий с п р я т а н вход в г р о б н и ц у ф а р а о н а Т у т р а м з е с а . М н о г и е к л а д о к 95
и с к а т е л и о т п р а в л я л и с ь в д о р о г у , ч т о б ы н а й т и вход в гробницу и обнаружить несметные сокровища. Напрасно! Проклятие фараона гласило: как только к л а д о и с к а т е л ь п о п а д а е т в т р е у г о л ь н о е к о р о л е в с т в о , он должен двигаться только прямолинейно в направлении к в е р ш и н е одной из п и р а м и д . П р и э т о м , п р е о д о л е в п о л о в и н у пути, он д о л ж е н н е к о т о р о е в р е м я о т д о х н у т ь и з а т е м с н о в а о т п р а в и т ь с я в п у т ь по н а п р а в л е н и ю к к а ­ к о й - н и б у д ь из т р е х п и р а м и д . К а ж д ы й р а з н а п р а в л е н и е в ы б и р а е т с я с л у ч а й н ы м о б р а з о м . С у щ е с т в у е т ли в т р е ­ угольном королевстве точка, в которую кладоискатель н и к о г д а не с м о ж е т п о п а с т ь ? Е с л и д а , то вход в г р о б н и ц у останется навсегда скрытым и фараон навеки будет о с т а в л е н в покое. Написать программу для кладоискателя, показываю­ щ у ю на э к р а н е т о л ь к о точки о с т а н о в к и п у т н и к а . ( З а д а ­ ются координаты трех угловых точек треугольного коро­ левства и начальное положение кладоискателя.) П о л у ч и т ь к а к м и н и м у м 5 г р а ф и к о в . О д и н из них д о л ж е н б ы т ь д л я с л е д у ю щ и х н а ч а л ь н ы х у с л о в и й : на­ ч а л ь н а я точка и три вершины л е ж а т в 4 углах экрана; п р о д е л а т ь 5000 и т е р а ц и й . 10. П р е д п о л о ж и м , что и м е е т с я н е к о т о р ы й к у с о к л е н ­ ты, р а з д е л е н н ы й на к а д р ы . К а д р ы з а н у м е р о в а н ы с д в у х сторон. П о л о с к а л е н т ы с к л е е н а в л и с т М е б и у с а . Н е о б х о ­ д и м о с о с т а в и т ь а л г о р и т м у п о р я д о ч е н и я этой п о с л е д о в а ­ т е л ь н о с т и , п р е д п о л о ж и в , что с о с е д н и е к а д р ы м о ж н о п е р е ­ ставлять (естественно, в упорядоченной последователь­ ности б у д е т один « с к а ч о к » от м и н и м а л ь н о г о э л е м е н т а к м а к с и м а л ь н о м у ) . С л е д у е т у ч е с т ь , что при п е р е с т а н о в к е к а д р о в п е р е с т а в л я ю т с я ч и с л а с обеих с т о р о н к а д р о в . Н а п р и м е р : есть 2 к а д р а , А В, — одна сторона к а д ­ ров, А В — д р у г а я . П у с т ь А = 1, А — 2, В = 7, В = 3. Т о г д а п о с л е п е р е с т а н о в к и с о д е р ж и м о г о А и В б у д е т А, = = 7, Л = 3, Д, = 1, В = 2. ь ъ 2 2 { { 2 Всегда ли такое упорядочение 96 2 возможно? 2
11. И м е е т с я N ч е л о в е к и ц е л ы е ч и с л а А A. М о ж е т л и ч и с л о з н а к о м ы х i-ro ч е л о в е к а в этой г р у п п е р а в н я т ь с я Л,? 12. У с л о в и е з а д а ч и 11. У к а з а т ь один из в о з м о ж н ы х вариантов знакомств. 13. З а д а н о с е м е й с т в о м н о ж е с т в б у к в . Н а й т и т а к о е м а к с и м а л ь н о е k, д л я к о т о р о г о м о ж н о п о с т р о и т ь мно­ ж е с т в о , с о с т о я щ е е из k б у к в , п р и ч е м к а ж д а я из них п р и н а д л е ж и т ровно k множествам з а д а н н о г о семейства. 14. В м у з е е р е г и с т р и р у е т с я в т е ч е н и е д н я в р е м я прихода и ухода к а ж д о г о посетителя. Таким образом за д е н ь п о л у ч е н ы N п а р з н а ч е н и й , где п е р в о е з н а ч е н и е в паре показывает время прихода посетителя, а второе з н а ч е н и е — в р е м я его у х о д а . Н а й т и п р о м е ж у т о к в р е м е ­ ни, в т е ч е н и е к о т о р о г о в м у з е е о д н о в р е м е н н о н а х о д и л о с ь м а к с и м а л ь н о е число посетителей. 15. З а д а е т с я ч и с л о п> 1, к о т о р о е о п р е д е л я е т р а з м е р ­ ность пространства и р а з м е р ы М «-мерных п а р а л л е л е п и ­ п е д о в (а,,, a ), / = 1 , М. П а р а л л е л е п и п е д м о ж е т р а с п о л а г а т ь с я в п р о с т р а н с т в е л ю б ы м из с п о с о б о в , п р и к о т о р ы х его р е б р а п а р а л л е л ь н ы о с я м к о о р д и н а т . Н а й т и максимальную последовательность вкладываемых друг в друга параллелепипедов. и N in 16. П о с т р о и т ь м а к с и м а л ь н о е м н о ж е с т в о , с о с т о я щ е е из п о п а р н о не с р а в н и м ы х в е к т о р о в у. В е к т о р ы v о п р е д е ­ л я ю т с я п а р а м и ч и с е л , в ы б и р а е м ы х из д а н н о й п о с л е ­ д о в а т е л ь н о с т и чисел а а , п~^-\. Д в а вектора v — (a, b) и v' = (a', b') н а з ы в а ю т с я с р а в н и м ы м и , е с л и a^La' и b^.b' или а^а' и b^b , в противном случае — несравнимыми. 17. П у с т ь г р у п п а состоит из N ч е л о в е к . Н а з о в е м о д н о г о из э т и х л ю д е й з н а м е н и т о с т ь ю , е с л и он не з н а е т н и к о г о из о с т а в ш и х с я , а его з н а ю т все. З а д а ч а с о с т о и т в т о м , ч т о б ы в этой г р у п п е о п р е д е л и т ь з н а м е н и т о с т ь ( е с л и о н а т а м есть). П р и э т о м р а з р е ш а е т с я з а д а в а т ь т о л ь к о в о п р о с ы в и д а : « И з в и н и т е , з н а е т е л и В ы вон того ч е л о в е к а ? » ( П р е д п о л а г а е т с я , что все о т в е т ы п р а в д и в ы , ь п r 4 Информатика, 8—9 кл. 97
и что д а ж е з н а м е н и т о с т ь о т в е т и т на п о с т а в л е н н ы й ей вопрос.) Н а й т и м и н и м а л ь н о е н е о б х о д и м о е ч и с л о в о п р о с о в , ко­ торые надо задать, и описать алгоритм опроса. В х о д н ы е д а н н ы е : м а т р и ц а C[i, / ] , т а к а я , что С [г, / ] = = 1, е с л и i з н а е т / , и C[i, / ] = 0, е с л и и н а ч е . 18. Н а б и р ж е е с т ь N п р о д а в ц о в и М п о к у п а т е л е й и один в и д т о в а р а . К а ж д ы й п р о д а в е ц о п р е д е л я е т д л я с е б я и о б ъ я в л я е т м и н и м а л ь н у ю ц е н у , по к о т о р о й он согласен продать товар, а каждый покупатель называет м а к с и м а л ь н у ю ц е н у , по к о т о р о й он е щ е с о г л а с е н к у п и т ь товар. Н а й т и т а к у ю е д и н у ю цену на т о в а р , ч т о б ы с у м м а сделок купли-продажи была максимальной. Н а й т и т а к у ю м а к с и м а л ь н у ю е д и н у ю цену на т о в а р , чтобы общее количество продавцов и покупателей, уча­ ствующих в торгах, было максимальным. 19. П у с т ь blackbox(v) — функция аргумента v; blackbox(v)—\, если слово v я в л я е т с я частью неизвест­ ного с л о в а ш, и 0 — в п р о т и в н о м с л у ч а е . Р а з р а б о т а т ь п р о г р а м м у н а х о ж д е н и я с л о в а w с по­ мощью к а к можно более короткой последовательности вызовов функции blackbox. УКАЗАНИЯ К Р Е Ш Е Н И Ю ЗАДАЧ ПОВЫШЕННОЙ СЛОЖНОСТИ 1. Д л я р е ш е н и я з а д а ч и н е о б х о д и м о с р а в н и т ь ч и с л о X с э л е м е н т а м и м а с с и в а . Е с л и с р а в н и в а т ь X со всеми э л е м е н т а м и м а с с и в а А, к о л и ч е с т в о о п е р а ц и й с р а в н е н и я равно M-N. Существенно сократить количество сравнений можно, если р а с с м а т р и в а т ь первую строку и последний столбец м а с с и в а А к а к один м а с с и в . Э л е м е н т ы в нем у п о р я д о ч е ­ ны по в о з р а с т а н и ю . Р а с с м о т р и м э л е м е н т Л [ 1 , М]. Возможны следующие ситуации. 1) Х = А [ 1 , М]. 98
В этом случае з а д а н н ы й элемент найден. 2) Х<А[1, М]. Т о г д а э л е м е н т а , р а в н о г о X, в с т о л б ц е с н о м е р о м М б ы т ь не м о ж е т . П о э т о м у м о ж н о о г р а н и ч и т ь с я п о и с к о м з а д а н н о г о э л е м е н т а в м а с с и в е А с в ы б р о ш е н н ы м М-м столбцом. 3) Х>А[\, М]. В э т о м с л у ч а е э л е м е н т а , р а в н о г о X, в с т р о к е с н о м е ­ р о м 1 б ы т ь не м о ж е т . П о э т о м у в д а л ь н е й ш е м п о и с к заданного элемента будет проводиться в массиве А без первой строки. Т а к и м о б р а з о м , на к а ж д о м ш а г е , п о с л е с р а в н е н и я з а д а н н о г о э л е м е н т а X со з н а ч е н и е м э л е м е н т а из п р а в о г о в е р х н е г о у г л а м а с с и в а , из м а с с и в а в ы б р а с ы в а е т с я л и б о с т р о к а , л и б о с т о л б е ц . В р е з у л ь т а т е этого с у м м а р н о е ч и с л о с т р о к и с т о л б ц о в у м е н ь ш а е т с я на 1. П о э т о м у д л я р е ш е н и я з а д а ч и п о т р е б у е т с я не б о л е е чем JV + M с р а в ­ нений. . 2. Н о м е р а с т р о к и г' и с т о л б ц а / д о л ж н ы с о в п а д а т ь , иначе в строке будет недиагональный нулевой элемент. Простейшим решением является просмотр элементов /-й с т р о к и и i-ro с т о л б ц а , i = l , 2, N, м а с с и в а до н а ­ х о ж д е н и я и н д е к с а k т а к о г о , что э л е м е н т ы к-Р> с т р о к и и k-ro с т о л б ц а у д о в л е т в о р я ю т т р е б у е м о м у с в о й с т в у или д о у с т а н о в л е н и я ф а к т а , что т а к о г о и н д е к с а нет. О ч е ­ в и д н о , что в п о с л е д н е м с л у ч а е н е о б х о д и м п р о с м о т р почти всех э л е м е н т о в м а с с и в а . 0 0 Однако возможно существенно сократить количество операций, используя следующий факт. Р а с с м о т р и м э л е м е н т A [k, j], кф]. Возможны две ситуации: l)A[k, Я-0. В э т о м с л у ч а е м о ж н о з а м е т и т ь , что и н д е к с к не подходит, т а к к а к в с т р о к е с и н д е к с о м k стоит 0. П о э т о м у м о ж н о о г р а н и ч и т ь с я п о и с к о м з а д а н н о г о э л е м е н т а в подм а с с и в е б е з k-vo с т о л б ц а и k-i\ с т р о к и . 2) А [к, / ] = 1 . 99
В этом с л у ч а е м о ж н о з а м е т и т ь , что и н д е к с / не подхо­ д и т , т а к к а к в с т о л б ц е с и н д е к с о м / с т о и т 1. П о э т о м у м о ж н о о г р а н и ч и т ь с я поиском з а д а н н о г о э л е м е н т а в п о д м а с с и в е без / - г о с т о л б ц а и /-Й с т р о к и . Т а к и м о б р а з о м , р а с с м а т р и в а я на к а ж д о м ш а г е з н а ч е ­ ния э л е м е н т о в A [k, /'] т а к и х , что A [k, / ] я в л я е т с я э л е ­ ментом интересующего нас подмассива, потребуется про­ с м о т р р о в н о N— 1 э л е м е н т а д л я у с т а н о в л е н и я е д и н с т в е н ­ ного и н д е к с а k, к о т о р ы й м о ж е т у д о в л е т в о р и т ь т р е б у е м о ­ му с в о й с т в у . О с т а е т с я п р о в е р и т ь т о л ь к о э л е м е н т ы э т о г о столбца и строки. k\ = \ д л я j от 2 до N е с л и A [k, j] = 0 то k: = j После окончания цикла остается проверить только э л е м е н т ы k-vo с т о л б ц а и k-n с т р о к и . С у м м а р н а я т р у д о е м к о с т ь о п и с а н н о г о а л г о р и т м а не п р е в о с х о д и т 3N о п е р а ц и й . 3. П р о с т е й ш и м р е ш е н и е м я в л я е т с я п р о с м о т р к о о р д и ­ н а т в е р ш и н Л/-угольника и о п р е д е л е н и е , с о в п а д а ю т л и к о о р д и н а т ы одной из них с к о о р д и н а т а м и точки (х; у). В э т о м с л у ч а е необходим п р о с м о т р к о о р д и н а т всех N вершин многоугольника. Сократить количество операций просмотра можно, используя метод дихотомии. П р о н у м е р у е м в е р ш и н ы от 1 д о N в п о р я д к е обхода по контуру и занесем координаты вершин в массив. С р а в н и м в н а ч а л е к о о р д и н а т у п е р в о й в е р ш и н ы в обхо­ д е с к о о р д и н а т а м и точки (х; у). Е с л и они с о в п а д а ю т , то з а д а ч а р е ш е н а . Е с л и не с о в п а д а ю т , то т о ч к а (х, у) м о ж е т с о в п а д а т ь с одной из о с т а в ш и х с я N— 1 в е р ш и н о й . Н о м е р начальной вершины оставшегося участка контура равен 2, конечной — JV. П у с т ь на н е к о т о р о м ш а г е н о м е р а н а ч а л ь н о й и ко­ нечной в е р ш и н р а с с м а т р и в а е м о г о к о н т у р а р а в н ы / и q соответственно. Н а й д е м номер средней вершины т = 100
— (/ + </) div 2. О п р е д е л и м т е п е р ь п о л о ж е н и е точки (х; у) и в е р ш и н ы с н о м е р о м / о т н о с и т е л ь н о п р я м о й , проходящей через вершины с номерами 1 и т . Возможны следующие ситуации: 1) Т о ч к и л е ж а т по одну с т о р о н у от п р я м о й . В этом с л у ч а е н а с не и н т е р е с у е т ч а с т ь к о н т у р а от в е р ­ ш и н ы т до в е р ш и н ы q. П о э т о м у последней и н т е р е с у ю щ е й н а с в е р ш и н о й в к о н т у р е м о ж н о счи­ т а т ь в е р ш и н у т—1. П о л а г а е м q:=m—1. 2) Т о ч к и л е ж а т по р а з н ы е с т о р о н ы от п р я м о й . В этом с л у ч а е н а с не и н т е р е с у е т ч а с т ь к о н т у р а от в е р ш и ­ ны / д о в е р ш и н ы т—1. П о э т о м у п е р в о й и н т е р е с у ­ ющей нас вершиной в контуре можно считать в е р ш и н у т. П о л а г а е м f:=m. П р о ц е с с з а к а н ч и в а е т с я , к о г д а q — / = 1 (т. е. о с т а л о с ь т о л ь к о д в е т о ч к и ) . П р о в е р к а их к о о р д и н а т на с о в п а д е н и е с точкой (х; у) и д а е т ответ на п о с т а в л е н н ы й в з а д а ч е вопрос. П р и м е ч а н и е . Для решения задачи нам понадобилось проана­ лизировать 0(log J V) вершин. 2 Этот п р и м е р п о к а з ы в а е т , что м е т о д д и х о т о м и и м о ж н о п р и м е н я т ь не т о л ь к о к ч и с л о в ы м у п о р я д о ч е н н ы м м н о ж е ­ ствам. 4. П р о н у м е р у е м т р а п е ц и и слева н а п р а в о от 1 до yV­f­1. Л е в а я б е с к о н е ч н а я т р а п е ц и я имеет н о м е р 1, п р а ­ в а я — (iV­f­1), к о н е ч н ы е т р а п е ц и и — от 2 до N. Простейшим решением является последовательное о п р е д е л е н и е п о л о ж е н и я т о ч к и (х; у) о т н о с и т е л ь н о п р я ­ м ы х , п р о х о д я щ и х ч е р е з точки с к о о р д и н а т а м и ( Л , _ , ; 1), 0) и ( Л ; 1), ( £ , ; 0) с о о т в е т с т в е н н о , i = 2 , N . Воз­ можны следующие ситуации. ; 1) Т о ч к а л е ж и т по одну сторону от п р я м ы х . Полагаем i:=i-\-l. 2) Т о ч к а л е ж и т по р а з н ы е с т о р о н ы от п р я м ы х . Т о г д а интересующей нас трапецией является конечная т р а п е ц и я с и н д е к с о м i. 101
Е с л и м ы п р о а н а л и з и р о в а л и все к о н е ч н ы е т р а п е ц и и , а с и т у а ц и я 2) не в о з н и к л а , то т о ч к а л е ж и т в одной из б е с к о н е ч н ы х т р а п е ц и й . П р о в е р и м , л е ж а т л и т о ч к а (х; у) и т о ч к а из л е в о й б е с к о н е ч н о й т р а п е ц и и по одну с т о р о ­ ну от п р я м о й , п р о х о д я щ е й ч е р е з точки (А ; 1), (B ; 0 ) . Е с л и д а , то т о ч к а п р и н а д л е ж и т л е в о й б е с к о н е ч н о й т р а ­ пеции, е с л и нет — п р а в о й . { t Однако можно существенно сократить количество операций, используя метод дихотомии. О п р е д е л и м индексы начального и конечного номеров интересующих н а с трапеций, среди которых будет иско­ мая. Вначале индексы равны 1 и JV+ 1 соответственно. П у с т ь на н е к о т о р о м ш а г е и н д е к с ы н а ч а л ь н о г о и ко­ нечного н о м е р о в и н т е р е с у ю щ и х н а с т р а п е ц и и р а в н ы / и q соответственно. Вычислим индекс среднего номера m = (/ + ? ) d i v 2. О п р е д е л и м в з а и м н о е р а с п о л о ж е н и е т о ч к и (х; у) и точ­ ки, л е ж а щ е й з а в е д о м о в л е в о й б е с к о н е ч н о й т р а п е ц и и , относительно прямой, проходящей через точки с коорди­ н а т а м и {А ; 1), (В ; 0). Возможны следующие ситуации. 1) Т о ч к и л е ж а т по одну с т о р о н у от п р я м о й . В э т о м с л у ч а е н а с не и н т е р е с у ю т т р а п е ц и и с н о м е р а м и от т И ДО т f Полагаем q:=m. 2) Т о ч к и л е ж а т по р а з н ы е с т о р о н ы от п р я м о й . В э т о м с л у ч а е н а с не и н т е р е с у ю т т р а п е ц и и с н о м е р а м и от / до т. П о л а г а е м / : = т + 1 . А л г о р и т м з а к а н ч и в а е т р а б о т у , к о г д а f=q. Искомая т р а п е ц и я имеет номер /. 5. С р е д и N в в е д е н н ы х н а т у р а л ь н ы х ч и с е л о т с у т с т в у е т по к р а й н е й м е р е одно ч и с л о из и н т е р в а л а [ 1 , N + 1]. И д е я р е ш е н и я с о с т о и т в и с п о л ь з о в а н и и м а с с и в а из N ч и с е л , в котором элемент с индексом i «регистрирует», пришло л и ч и с л о со з н а ч е н и е м L П о с л е « р е г и с т р а ц и и » всех элементов последовательности остается только прове­ р и т ь , к а к о е м и н и м а л ь н о е ч и с л о не « з а р е г и с т р и р о в а н о » . 102
В качестве признака «регистрации» числа i можно зано­ с и т ь в t-й э л е м е н т м а с с и в а 1. П е р в о н а ч а л ь н о все ч и с л а « н е з а р е г и с т р и р о в а н ы » — все э л е м е н т ы м а с с и в а р а в н ы 0 . Е с л и в с е ч и с л а от 1 до N « з а р е г и с т р и р о в а н ы » , то минимальное отсутствующее натуральное — N-\-l. 6. О ч е в и д н о , что при в в о д е N н а т у р а л ь н ы х ч и с е л по к р а й н е й м е р е одно число из и н т е р в а л а [ 1 , N-f-1] отсутст­ вует. О п р е д е л и м начало а и конец Ь некоторого и н т е р в а л а и н д е к с о в , к о т о р ы й н а с и н т е р е с у е т . В о з м о ж н о л и з а один п р о с м о т р л е н т ы у с т а н о в и т ь , все л и ч и с л а из и н т е р в а л а [а, Ь] п р и с у т с т в у ю т на л е н т е ? У ч и т ы в а я тот ф а к т , что з а п и с а н н ы е числа р а з л и ч н ы , м о ж н о о п р е д е л и т ь , с к о л ь к о ч и с е л , з а п и с а н н ы х на л е н т е , п о п а д а ю т в и н т е р е с у ю щ и й нас интервал. С другой стороны, нетрудно определить к о л и ч е с т в о н а т у р а л ь н ы х чисел на и н т е р в а л е [а, Ь] — это (b-a+l). А л г о р и т м состоит в с л е д у ю щ е м . Определим значения н а ч а л а и конца интересующего н а с и н т е р в а л а . О ч е в и д н о , что в н а ч а л е они р а в н ы 1 и IV-f 1 с о о т в е т с т в е н н о . П у с т ь на некотором ш а г е з н а ч е н и я н а ч а л а и к о н ц а интересующего нас интервала равны / и q соответствен­ но. О п р е д е л и м и н д е к с с р е д н е г о э л е м е н т а и н т е р в а л а т — = ( / + <?) div 2. Н а й д е м т е п е р ь к о л и ч е с т в о э л е м е н т о в k на л е н т е , л е ж а щ и х в и н т е р в а л е [/, т]. Возможны следующие ситуации. 1) К о л и ч е с т в о э л е м е н т о в к<т — В этом с л у ч а е н а с не и н т е р е с у е т и н т е р в а л от т до q, т а к к а к на и н т е р в а л е [/, т] хотя бы о д н о ч и с л о о т с у т с т в у е т . Поэтому интересующим нас интервалом можно с ч и т а т ь [/, т\. П о э т о м у п о л а г а е м q\—m. 2) К о л и ч е с т в о э л е м е н т о в k = m — / - f - 1 - В этом с л у ч а е н а с не и н т е р е с у е т и н т е р в а л от / до т, т а к к а к на и н т е р в а л е [/, т] в с е н а т у р а л ь н ы е ч и с л а п р и с у т с т ­ вуют. Таким образом, интересующим нас интерва
л о м м о ж н о с ч и т а т ь [m+l, q]. П о э т о м у п о л а г а е м q:=m-\-\. П р о ц е с с о к а н ч и в а е т с я , к о г д а / = <?. З н а ч е н и е / я в л я ­ ется искомым. 7. С о з д а д и м д в а м а с с и в а , к а ж д ы й из к о т о р ы х б у д е т с о д е р ж а т ь м а с с ы монет из п е р в о г о и в т о р о г о с т о л б и к о в соответственно. О ч е в и д н о е р е ш е н и е з а д а ч и — « с л и я н и е » этих д в у х м а с с и в о в в о б щ и й у п о р я д о ч е н н ы й м а с с и в весов и н а х о ж ­ д е н и е в нем 64-го по в е л и ч и н е э л е м е н т а . Однако задачу можно решить быстрее, используя м е т о д д и х о т о м и и . П р и этом не в о з н и к а е т н е о б х о д и м о с т и объединять исходные массивы. О б о з н а ч и м с о о т в е т с т в е н н о ч е р е з N и К, н а ч а л ь н ы й и к о н е ч н ы й н о м е р а э л е м е н т о в в р а с с м а т р и в а е м ы х на д а н н о м ш а г е м а с с и в а х , / = 1, 2. О п р е д е л и м н о м е р а с р е д ­ них э л е м е н т о в Sj = (iV;-f-/T,) div 2. Н а п е р в о м ш а г е А/, = 1, /С, = 64, N =l, /С = 64, S , = 32, S = 32. З н а ч е н и я э л е ­ м е н т о в , с т о я щ и х н а м е с т е S , г ' = 1 , 2, о б о з н а ч и м X и У. t 2 2 2 ; С р а в н и в с р е д н и е э л е м е н т ы X и Y, н а й д е м б о л ь ш и й из них. П у с т ь это X. В с и л у у п о р я д о ч е н н о с т и м а с с и в а к а ж д ы й из э л е м е н т о в , с т о я щ и х п е р е д X, б о л ь ш е X по величине. С другой стороны, только элементы, стоящие п е р е д Y во в т о р о м м а с с и в е , м о г у т б ы т ь б о л ь ш е X. П о э т о ­ му X б о л ь ш е и с к о м о г о 64-го э л е м е н т а . С л е д о в а т е л ь н о , в п е р в о м м а с с и в е м о ж н о не р а с с м а т р и в а т ь п е р в ы е 32 э л е м е н т а . А н а л о г и ч н о м о ж н о п о к а з а т ь , что э л е м е н т ы , с т о я щ и е п о с л е Y, м о ж н о т а к ж е не р а с с м а т р и в а т ь , т а к к а к они меньше искомого элемента. П о с л е таких действий в мас­ с и в а х о с т а л о с ь по 32 э л е м е н т а , и п р и э т о м н е о б х о д и м о н а й т и 32-й по в е л и ч и н е э л е м е н т . Повторяем описанный выше процесс с измененными значениями начальных N к о н е ч н ы х К, и с р е д н и х S, н о м е р о в э л е м е н т о в в м а с с и в а х по с л е д у ю щ е м у п р а в и л у : если б о л ь ш и й из X и Y н а х о д я т с я в п е р в о м м а с с и в е , то iVi = S i _ 1 , K = S , и н а ч е N = S +l, K = S. П р о ц е с с h 2 104 2 2 2 l i
з а к а н ч и в а е т с я , к о г д а в к а ж д о м м а с с и в е о с т а н е т с я по о д н о м у э л е м е н т у . П р и этом б о л ь ш и й из них и б у д е т искомым. Примечание. Поскольку количество монет после каждого шага уменьшается в два раза, то количество взвешиваний — lo 128=7. g2 8. О ч е в и д н ы м р е ш е н и е м з а д а ч и я в л я е т с я с о з д а н и е общего упорядоченного массива, содержащего элементы всех и с х о д н ы х м а с с и в о в , и н а х о ж д е н и е в нем k-ro по величине элемента. П р и м е ч а н и е . В этом случае требуется порядка (а, + а + . . . + l o g ( a , + a + ... + а „ ) операций. 2 + 2 2 Однако можно существенно сократить количество о п е р а ц и й , и с п о л ь з у я д и х о т о м и ч е с к и й способ п о и с к а . П у с т ь д л я к а ж д о г о из н а б о р о в i о п р е д е л е н ы н а ­ ч а л ь н ы й iV и к о н е ч н ы й Ki и н д е к с ы . О п р е д е л и м и н д е к с ы с р е д н и х э л е м е н т о в S — (N -\-K )div2 для массивов с Ki^Nj. Найдем максимальное max и минимальное min с р е д и з н а ч е н и й с р е д н и х э л е м е н т о в . О п р е д е л и м т а к ж е S, д л я м а с с и в о в с Kj<Nj по п р а в и л у Sj — K На каждой итерации вычисляем значение S — Si -f-S -f-... -f- S . Возможны три ситуации. 1) S > k . В э т о м с л у ч а е и с к о м ы й э л е м е н т не м е н ь ш е м и н и ­ м а л ь н о г о с р е д н е г о э л е м е н т а m i n ( п у с т ь он нахо­ дится в наборе с номером '/)• Тогда элементы с индексами /С, з а в е д о м о не я в л я ю т с я р е ш е н и е м и их м о ж н о и г н о р и р о в а т ь . П о э т о м у п е р е ­ с ч и т ы в а е м Kj по п р а в и л у Kj = Sj—l (напомним, что Kj>Nj). 2) S < k . В этом с л у ч а е и с к о м ы й э л е м е н т не б о л ь ш е м а к с и ­ м а л ь н о г о э л е м е н т а m a x ( п у с т ь он н а х о д и т с я в н а ­ б о р е с н о м е р о м t). Т о г д а э л е м е н т ы с и н д е к с а м и ; i i i r 2 N 105
N, S з а в е д о м о не я в л я ю т с я р е ш е н и е м и их можно игнорировать. Поэтому пересчитываем N по п р а в и л у N , = 5,­4­1 ( н а п о м н и м , что K ^N ). 3) S = k. В этом с л у ч а е м о ж н о п е р е с ч и т а т ь Kj = Sj и N = = S , + 1. Процесс з а к а н ч и в а е т с я , когда начальный и ко­ н е ч н ы й Kj и н д е к с ы у д о в л е т в о р я ю т у с л о в и ю Kj<.Nj для к а ж д о г о L П р и э т о м м е н ь ш и й из э л е м е н т о в с и н д е к с а м и Ki и б у д е т и с к о м ы м ( е с л и К, = 0, то этот э л е м е н т р а с с м а т ­ р и в а т ь не н у ж н о ) . 9. Д л я р е ш е н и я з а д а ч и д о с т а т о ч н о о с у щ е с т в л я т ь п р о ­ с м о т р э л е м е н т о в м а с с и в о в А и В, ф и к с и р у я д в е в е л и ­ чины: 1) п о л о ж е н и е р м а к с и м а л ь н о г о п р о с м о т р е н н о г о э л е ­ м е н т а из. Л; 2) з н а ч е н и е и н д е к с о в i , / д л я м а к с и м а л ь н о й н а й ­ денной суммы, удовлетворяющей требованию условия. t t t t t t 0 0 Н а н а ч а л ь н о м э т а п е р = 1 , / = 1. /о — 2­ П р и п р о с м о т р е о ч е р е д н о г о э л е м е н т а i из Л о п р е д е л я ­ ется: м а к с и м а л ь н а я из с у м м {A [i l + B[j ], A [p] + B[i+ 1], Л [i\ + B[i+ 1]} пересчетом индексов i , / для максимальной най­ денной суммы; индекс р максимального просмотренного элемента из Л ( п р и с р а в н е н и и з н а ч е н и й Л [р] и Л [£]). Д е й с т в и я в ы п о л н я ю т с я д л я i от 2 д о —1. 10. Е с л и ф у н к ц и я я в л я е т с я монотонной и н е п р е р ы в ­ ной на п р о м е ж у т к е [а, Ь] и и м е е т на к о н ц а х п р о м е ж у т к а з н а ч е н и я р а з н ы х з н а к о в , то о н а и м е е т на э т о м п р о м е ­ ж у т к е единственный корень, который можно найти мето­ дом дихотомии. 0 0 0 0 0 Е с л и ф у н к ц и я имеет на п р о м е ж у т к е е д и н с т в е н н ы й к о р е н ь , то з н а ч е н и я ф у н к ц и и на к о н ц а х этого п р о м е ­ ж у т к а и м е ю т р а з н ы е з н а к и , т.е. / ( a ) f (b)<z0. Найдем с е р е д и н у о т р е з к а [a, b]:c = (a-{-Ь)/2. Точка с р а з д е л и т 106
н а ш п р о м е ж у т о к на д в е ч а с т и . В ы ч и с л и м з н а ч е н и е / (с). Е с л и / ( с ) = 0 , то с — к о р е н ь у р а в н е н и я . Е с л и / ( с ) Ф 0 , то л и б о / ( а ) / ( с ) < 0 , л и б о / ( с ) / ( 6 ) < 0 . В к а ч е с т в е нового п р о м е ж у т к а [а, Ь] б е р е м тот, на к о н ц а х к о т о р о г о ф у н к ц и я принимает значения разных знаков. Длина промежутка с о к р а т и л а с ь в д в о е . Р а з д е л и м [а, Ь] п о п о л а м и из д в у х п о л у ч е н н ы х п р о м е ж у т к о в в ы б е р е м тот, на к о н ц а х кото­ рого ф у н к ц и я п р и н и м а е т з н а ч е н и я р а з н ы х з н а к о в , и т. д . П р о ц е с с п р о д о л ж а е т с я до тех п о р , п о к а м о д у л ь з н а ­ чения ф у н к ц и и в н а й д е н н о й на д а н н о м ш а г е т о ч к е х не б у д е т м е н ь ш е 1 0 ~ " ( е с л и /г = 5, то \f(x)\<0,00001). 11. П о п ы т а е м с я р а с п р е д е л и т ь г л а в ы по т о м а м р а в н о ­ м е р н о . Н а к а ж д ы й том п р и д е т с я не б о л е е P—TN/K~\ г л а в , где П — о к р у г л е н и е по и з б ы т к у . Т о м а с 1-го по (К—1)-й б у д у т с о д е р ж а т ь по Р г л а в , а том с н о м е р о м К — (N—РК) глав. Найдем максимальный объем тома п р и т а к о м р а с п р е д е л е н и и . З а п о м н и м его в п е р е м е н н о й high. Это б у д е т о ц е н к а м и н и м а л ь н о г о о б ъ е м а V с в е р х у . В п е р е м е н н о й low б у д е м х р а н и т ь о ц е н к у V с н и з у . В ы б е р е м ее к а к м а к с и м у м из д в у х в е л и ч и н : о б ъ е м а н а и б о л ь ш е й г л а в ы и ч а с т н о г о от д е л е н и я с у м м а р н о г о о б ъ е м а всех г л а в на к о л и ч е с т в о т о м о в (что с о о т в е т с т в у е т и д е а л ь н о м у р а в н о м е р н о м у р а с п р е д е л е н и ю с т р а н и ц по т о м а м ) . О б о з н а ч и м ч е р е з level п о л у с у м м у о ц е н о к с в е р х у и снизу: level = (low -f-high) div 2. П о п ы т а е м с я р а с п р е д е л и т ь г л а в ы по т о м а м т а к , чтобы о б ъ е м к а ж д о г о т о м а не п р е в о с х о д и л level. Б у д е м з а н о ­ с и т ь в о ч е р е д н о й том г л а в ы до тех п о р , п о к а д о б а в л е н и е с л е д у ю щ е й г л а в ы не п р и в е д е т к п р е в ы ш е н и ю level. П о с л е этого п е р е й д е м к ф о р м и р о в а н и ю с л е д у ю щ е г о тома. Е с л и н а м у д а л о с ь р а с п р е д е л и т ь все г л а в ы по т о м а м , то м ы н а ш л и н о в у ю о ц е н к у д л я V с в е р х у . В этом с л у ч а е п о л а г а е м high = level. Е с л и ж е мы с ф о р м и р о в а л и п о с л е д н и й том и п о с л е этого о с т а л а с ь е щ е хотя бы одна г л а в а , то с м а к с и м а л ь 107
н ы м о б ъ е м о м т о м а не б о л е е level г л а в ы р а с п р е д е л и т ь нельзя. Требуется увеличить нижнюю оценку. Полагаем low: — level + 1. П о в т о р я е м э т о т п р о ц е с с до тех п о р , п о к а не с т а н е т low^high ( т е м с а м ы м о б ъ е м и с к о м о г о т о м а V уточнен до одной с т р а н и ц ы ) . З н а ч е н и е high и б у д е т и с к о м ы м минимальным объемом самого толстого тома. Применение метода дихотомии к решению данной з а д а ч и позволяет значительно сократить перебор воз­ можных вариантов. 12. О с н о в н а я с т р а т е г и я р е ш е н и я з а к л ю ч а е т с я в т о м , что к а ж д ы й с л е д у ю щ и й к а м е н ь к л а д е т с я в кучу с м е н ь ­ ш е й т е к у щ е й м а с с о й . П р и этом в п е р в у ю кучу н а д о п о л о ж и т ь к а м е н ь м а к с и м а л ь н о й м а с с ы . П о к а ж е м , что этого д о с т а т о ч н о , ч т о б ы г а р а н т и р о в а т ь п р а в и л ь н о е р е ш е ­ ние з а д а ч и . П о о к о н ч а н и и р а с п р е д е л е н и я к а м н е й по кучам возможны 2 ситуации; 1 ) В с е к а м н и п о п а л и во в т о р у ю к у ч у , а ее м а с с а о с т а л а с ь м е н ь ш е п о л о в и н ы м а с с ы п е р в о й кучи. П о н я т н о , что в этом с л у ч а е к а м н и т р е б у е м ы м о б р а з о м р а з б и т ь н е л ь з я , с л е д о в а т е л ь н о , р е ш е н и я не с у щ е с т в у е т . 2 ) С л у ч а й 1 не в ы п о л н я е т с я . Т о г д а в о з м о ж н ы с л е д у ­ ющие ситуации. а ) В с е к а м н и п о п а л и во в т о р у ю к у ч у . В этом с л у ч а е я с н о , что м а с с ы куч о т л и ч а ю т с я не б о л е е чем на п о л о в и н у п е р в о й кучи, е с л и м а с с а п е р в о й кучи б о л ь ш е , и л и не б о л е е чем на м а с с у п о с л е д н е г о к а м н я , п о л о ж е н н о г о во в т о р у ю к у ч у . - В л ю б о м из этих случаев требуемое условие выполняется. б) В п е р в у ю кучу п о п а л и и д р у г и е к а м н и . Т о г д а я с н о , что м а с с ы куч о т л и ч а ю т с я не б о л е е чем на м а с с у самого тяжелого камня, кроме первого. Следова­ тельно, и в этом случае условие з а д а ч и выполня­ ется. 13. Н а н а ч а л ь н о м э т а п е в п е р в у ю кучу к л а д е т с я с а м ы й т я ж е л ы й к а м е н ь , а во в т о р у ю — д в а с л е д у ю щ и х 108
по м а с с е к а м н я . Д л я о с т а в ш и х с я к а м н е й р е а л и з у е т с я о п и с а н н а я д л я з а д а ч и 12 с т р а т е г и я . 14. М ы м о ж е м о т с о р т и р о в а т ь о б а м а с с и в а — и Л , и В ( н а п р и м е р , по н е у б ы в а н и ю ) , д а л е е , е с л и п е р в ы е э л е м е н т ы м а с с и в о в А и В с о в п а д а ю т , то и щ е м и в Л , и в В м и н и м а л ь н ы е э л е м е н т ы б о л ь ш е д а н н о г о и повто­ р я е м с р а в н е н и я ; е с л и ж е э л е м е н т ы не с о в п а д а ю т л и б о о д и н из м а с с и в о в у ж е з а к о н ч и л с я , а д р у г о й е щ е нет, т о м а с с и в ы не п о х о ж и . {А и В у ж е о т с о р т и р о в а н ы } i : = l; {смотрим м а с с и в ы А и В , н а ч и н а я с п е р в ы х } j : = 1; {элементов} w h i l e ( i < = 10) a n d ( j < ===== 15) a n d ( A [ i ] = B [ j ] ) d o begin e l e m e n t : = A [i]; w h i l e ( i < = 10) a n d ( A [ i ] = = e l e m e n t ) do i : = = i + l ; {поиск н е с о в п а д а ю щ е г о э л е м е н т а } w h i l e ( j < = = 1 5 ) a n d ( B [j]== e l e m e n t ) do J : ======= j —— I 1 - {поиск н е с о в п а д а ю щ е г о э л е м е н т а } end; if (I == 11) a n d ( j = = 1 6 ) { п р о с м о т р е л и все э л е м е н т ы А и В} then writeln ('Массивы похожи') else writeln ('Массивы непохожи'); 15. К а ж д о м у с л о в у п р и п и с ы в а е м н о м е р в с л о в а р е . С н а ч а л а с о р т и р у е м б у к в ы в к а ж д о м с л о в е по ( н а п р и м е р ) неубыванию. Получаем какой-то «ключ», который совпа­ д а е т у всех с л о в - а н а г р а м м ( н а п р и м е р , с л о в а « л о м » и « м о л » п р е о б р а з у ю т с я в одни и т е ж е к л ю ч и « л м о » ) . Д а л е е мы с о р т и р у е м к л ю ч и с л о в ( с о в м е с т н о с п р и п и ­ с а н н ы м и н о м е р а м и ) по н е у б ы в а н и ю . Все о д и н а к о в ы е ключи будут р а з м е щ а т ь с я в отсортированной последова­ тельности слов друг за другом. М ы просматриваем полу­ ченную последовательность, ищем совпадающие ключи и по п р и п и с а н н ы м им н о м е р а м н а х о д и м в с л о в а р е со­ ответствующие слова-анаграммы. 109
16. О т с о р т и р у е м о т р е з к и в п о р я д к е н е у б ы в а н и я к о о р ­ динат левых концов и будем моделировать последова­ т е л ь н о е их з а к р а ш и в а н и е , н а ч и н а я с с а м о г о л е в о г о от­ р е з к а . Н а з о в е м з а к р а ш и в а е м ы м тот о т р е з о к , к о т о р ы й я в л я е т с я о б ъ е д и н е н и е м одного или н е с к о л ь к и х о т р е з к о в . К а ж д ы й р а з , к о г д а б е р е м н о в ы й о т р е з о к из у п о р я д о ­ ченной п о с л е д о в а т е л ь н о с т и , м ы а н а л и з и р у е м с л е д у ю щ и е возможные ситуации. 1 ) Если новый отрезок пересекается с з а к р а ш и в а е ­ м ы м о т р е з к о м (его л е в а я к о о р д и н а т а не б о л ь ш е координаты правого конца закрашиваемого отрез­ к а ) , то н о в ы м п р а в ы м к о н ц о м з а к р а ш и в а е м о г о с е й ч а с о т р е з к а с т а н о в и т с я б о л е е п р а в ы й из к о н ц о в з а к р а ш и в а е м о г о и нового о т р е з к о в . 2) Е с л и н о в ы й о т р е з о к не п е р е с е к а е т с я с з а к р а ш и в а е ­ м ы м о т р е з к о м , то з а к р а с к а п р е д ы д у щ е г о о т р е з к а з а к о н ч е н а , его д л и н а с у м м и р у е т с я с д л и н о й у ж е закрашенной части, а з а к р а ш и в а е м ы м отрезком становится новый отрезок. П р о ц е с с п р о д о л ж а е т с я д о тех пор, пока не б у д у т п р о с м о т р е н ы все о т р е з к и . П о с л е этого д л и н а п о с л е д н е г о закрашенного отрезка суммируется с длиной ранее за­ крашенной части. 17. О с н о в н а я и д е я состоит в том, ч т о б ы не и с п о л ь з о ­ вать операцию умножения двух чисел. Если числа нату­ р а л ь н ы е , то о д н а из п а р д о л ж н а с о д е р ж а т ь м а к с и м а л ь ­ ное и м и н и м а л ь н о е ч и с л а . Р а с с у ж д а я т а к и м о б р а з о м д л я оставшихся чисел, приходим к простому алгоритму. Сор­ тируем числа в порядке неубывания. Тогда пары состав­ ляют первое и последнее числа, второе и предпоследнее и т. д . С и т у а ц и я н е м н о г о и з м е н я е т с я , е с л и ч и с л а ц е л ы е . В этом случае возможны три в а р и а н т а : 1) П р о и з в е д е н и е р а в н о 0. В э т о м с л у ч а е с у щ е с т в у е т хотя б ы N н у л е в ы х э л е м е н т о в . П о э т о м у п а р ы бу­ д у т о р г а н и з о в а н ы из о д н о г о н е н у л е в о г о э л е м е н т а и одного н у л е в о г о или из д в у х н у л е в ы х э л е м е н т о в . 110
2) П р о и з в е д е н и е п о л о ж и т е л ь н о . В этом с л у ч а е п е р е ­ множаются положительные числа с положитель­ н ы м и , а о т р и ц а т е л ь н ы е — с о т р и ц а т е л ь н ы м и по правилу, как и в случае с натуральными числами. 3) П р о и з в е д е н и е о т р и ц а т е л ь н о . В э т о м с л у ч а е п е р е ­ множается минимальное положительное число с м и н и м а л ь н ы м о т р и ц а т е л ь н ы м и т. д . Д л я определения ситуаций достаточно подсчитать количество нулевых, положительных и отрицательных элементов. Если есть нулевые элементы, то возможен только в а р и а н т 1). Е с л и к о л и ч е с т в о п о л о ж и т е л ь н ы х э л е м е н т о в не р а в н о к о л и ч е с т в у о т р и ц а т е л ь н ы х , то в о з м о ж е н т о л ь к о в а р и а н т 2). В д р у г и х с л у ч а я х в о з м о ж н а с и т у а ц и я 2) и 3 ) . Д л я определения знака произведения рассмотрим четыре элемента массива: максимальный положитель­ ный ( п у с т ь это а), м и н и м а л ь н ы й п о л о ж и т е л ь н ы й (6), м и н и м а л ь н ы й о т р и ц а т е л ь н ы й (с), м а к с и м а л ь н ы й о т р и ц а ­ т е л ь н ы й (d). П о н я т н о , что р е ш е н и е м могут б ы т ь т о л ь к о п а р ы (а, Ь), (с, d) или ( а , d), (b, с). Е с л и аф—с, то в с л у ч а е а>—с в паре с элементом а должен быть м е н ь ш и й по м о д у л ю из э л е м е н т о в b и d, а е с л и а < — с, то — б о л ь ш и й по м о д у л ю . В с л у ч а е , е с л и а== —с и Ь = = —d, э т а ч е т в е р к а не д а е т н и к а к о й и н ф о р м а ц и и о з н а ­ ке п р о и з в е д е н и я , п о э т о м у м о ж н о п е р е й т и к с л е д у ю щ е й ч е т в е р к е ч и с е л и т. д., п о к а не б у д е т у с т а н о в л е н з н а к п р о и з в е д е н и я . Е с л и ж е п р о с м о т р е н ы все ч и с л а , а з н а к не у с т а н о в л е н , то он м о ж е т б ы т ь к а к п л ю с , т а к и м и н у с . 18. Ч т о б ы с у м м а п р о и з в е д е н и й п а р б ы л а м а к с и м а л ь ­ на ( м и н и м а л ь н а ) , н е о б х о д и м о у п о р я д о ч и т ь н а б о р ы Л и В одинаковым (различным) образом, и пары будут состав­ л я т ь э л е м е н т ы , с т о я щ и е на о д и н а к о в ы х п о з и ц и я х в у п о ­ р я д о ч е н н ы х н а б о р а х . Это с л е д у е т из того, что е с л и а<Ь и c < r f , то ac-\-bd^ad-\-bc. 19. П р е д п о л о ж и м , что с р е д и п я т и чисел нет о д и н а к о ­ в ы х ( с л у ч а й с о в п а д а ю щ и х чисел р а с с м а т р и в а е т с я а н а л о ­ гично. В д а л ь н е й ш е м б у д е м о б о з н а ч а т ь о п е р а ц и ю с р а в Ш
нения з н а ч к о м « : » . Н а п р и м е р , 5 : 3 о з н а ч а е т , что мы сравниваем пятое и третье числа. З а п и с ь 5 < с З означает, что п я т о е ч и с л о м е н ь ш е т р е т ь е г о . С н а ч а л а в ы п о л н и м о п е р а ц и и 1:2, 3 : 4 . П р и необходи­ мости, п е р е н у м е р о в ы в а я ч и с л а , п о л у ч а е м , что 1 < 2 , 3 < 4 . Д а л е е в ы п о л н я е м о п е р а ц и ю 1:3. О п я т ь ж е при необходимости, перенумеровывая числа, получаем К З . В ы п о л н я е м о п е р а ц и ю 3 : 5 . П р и этом в о з м о ж н ы с л е д у ю ­ щие ситуации: 1) 3 > 5 . П о д в о д я итог ч е т ы р е х п р о д е л а н н ы х о п е р а ­ ций с р а в н е н и я , и м е е м : 1 < 2 ; 1 < = С 3 < 4 ; 5 < 3 . 1-я операция 2:3 2>3 6-я операция 2<3 5:2 2:4 I I 2>4 7-я операция 1>5 5<1<3<4<2 2<4 1:5 1:5 1<5 5>2 1<2<5<3<4 1>5 5<1<3<2<4 1<5<3<4<2 5<2 1<5<3<4<2 1:5 1>5 1<5 5<1<2<3<4 1<5<2<3<4 2) 3 < 5 . С р а в н и в а е м 4 и 5. Пусть 4 < 5 . Тогда 1 < 2 ; 1 < 3 < 4 < 5 . В ы п о л н я е м 2 : 4 . В з а в и с и м о с т и от р е з у л ь т а т а делаем либо 2 : 3 , либо 2 : 5 . Оставшиеся варианты рассматриваем аналогично. 2 0 . Б е з п о т е р и о б щ н о с т и п р е д п о л о ж и м , что э л е м е н т ы м а с с и в а А у п о р я д о ч е н ы в в о з р а с т а ю щ е м п о р я д к е (во м н о ж е с т в е нет д у б л и р у ю щ и х с я э л е м е н т о в , п о э т о м у м а с ­ с и в А у п о р я д о ч е н и м е н н о в в о з р а с т а ю щ е м , а не т о л ь к о 112
в н е у б ы в а ю щ е м п о р я д к е ) . Е с л и это не т а к , то д о б а в л я е м в программу подпрограмму сортировки. Е с л и с в о й с т в о (*) в ы п о л н я е т с я д л я п о д м н о ж е с т в а В, то оно в ы п о л н я е т с я и д л я т р е х н а и б о л ь ш и х по в е л и ч и н е э л е м е н т о в В. О б р а т н о , из в ы п о л н и м о с т и (*) д л я максимальных элементов В следует выполнимость трех (*) и д л я В. М ы б у д е м в к л ю ч а т ь в В в п о р я д к е их в о з р а с т а ­ н и я э л е м е н т ы из Л и п р о в е р я т ь д л я трех м а к с и м а л ь н ы х в ы п о л н е н и е у с л о в и я (*). 2 1 . а ) П у с т ь в п е р е м е н н о й MaxEndHere хранится сумма элементов максимального подвектора, з а к а н ч и в а ю щ е г о с я в п о з и ц и и i—1. Д л я того ч т о б ы п е р е м е н н а я MaxEndHere начала хра­ нить сумму элементов максимального подвек­ т о р а , о к а н ч и в а ю щ е г о с я в п о з и ц и и i, необходи­ мо в ы п о л н и т ь с л е д у ю щ у ю о п е р а ц и ю п р и с в а и ­ вания: MaxEndHere: = m a x (MaxEndHere-}-A [i], A [i]); а д л я того ч т о б ы н а й т и м а к с и м а л ь н у ю с у м м у MaxSoFar элементов подвектора, встретивше­ гося до п о з и ц и и i, н а д о в ы п о л н и т ь о п е р а ц и ю : MaxSoFar: — N\.ax(MaxSoFar, MaxEndHere). Программа: M a x S o F a r : = А [1]; M a x E n d H e r e : = А [1]; for i : = 2 to К do begin M a x E n d H e r e : = = m a x ( M a x E n d H e r e + A[i], A [ i ] ) ; MaxSoFar: =max(MaxSoFar, MaxEndHere); end; б) Д л я поиска минимальной суммы мы можем с н а ч а л а у м н о ж и т ь все э л е м е н т ы м а с с и в а А на 113
— 1, а з а т е м и с к а т ь , к а к и в п у н к т е а ) , м а к с и ­ мальную сумму. в ) О п р е д е л и м м а с с и в C[0..k] т а к о й , что С[£] = /4[1] + + ...+АЩ, С [ 0 ] = 0. З а м е т и м , что S(M, N)=^C[N]-C[M-l]. С у м м а S (М, N) э л е м е н т о в в е к т о р а А [М]­f­ -\-А [N] р а в н а н у л ю , е с л и С[М— l]—C[N]. И с х о д я из э т о г о с о о б р а ж е н и я , в о з ь м е м м а с с и в С, р т с о р т и р у е м его, з а т е м н а й д е м м и н и м а л ь н у ю по м о д у л ю р а з н о с т ь д в у х с о с е д н и х э л е м е н т о в о т с о р т и р о в а н н о г о м а с с и в а ( т . е. н а й д е м д в а н а и м е н е е о т л и ч а ю щ и х с я э л е м е н т а м а с с и в а С). Эта р а з ­ ность к а к р а з и б у д е т н а и б о л е е б л и з к и м к н у л ю з н а ч е н и ­ ем с у м м ы 5 ( М , N). г) К а к и в п р е д ы д у щ е м п у н к т е , с ф о р м и р у е м м а с с и в С, з а т е м его о т с о р т и р у е м . Н а м н а д о н а й т и в этом м а с с и в е д в а э л е м е н т а СЩ и С [ / ] , з н а ч е н и е р а з н о ­ сти к о т о р ы х н а и б о л е е б л и з к о к Р. П у с т ь м а с с и в С у п о р я д о ч е н по н е у б ы в а н и ю , и i и / — и н д е к с ы т е к у щ и х п р о с м а т р и в а е м ы х э л е м е н т о в м а с с и в а С. i: = l; j : = l; M i n S o F a r : = a b s ( С [2] — С [1] — Р ) ; { Т е к у щ е е з н а ч е ­ ние м и н и м а л ь н о й р а з н о с т и } w h i l e ( i < = k ) a n d ( j < = k ) do begin if i < > j {если это не один и тот ж е э л е м е н т м а с ­ с и в а С} then M i n S o F a r : = m i n ( M i n S o F a r , a b s ( C [ j ] — C [ i ] — P ) ) ; if C [ j ] ­ C [ i ] > P t h e n i : = i + l; { у в е л и ч и в а е м в ы ч и т а е м о е } else j : = j ­ f ­ l ; {увеличиваем уменьшаемое} end; 22. З а м е т и м , что е с л и м ы з н а е м с у м м у S [i] = Я [i]­{­ + . . . ­f­X [i4­M], то м о ж е м в ы ч и с л и т ь S [ i + 1 ] по оче­ видной формуле S 114 [i+ 1] = S [i] + X [i + М+ 1]-Х и,
и нет н е о б х о д и м о с т и во в л о ж е н н о м ц и к л е д л я в ы ч и с л е ­ ния S [ / + 1 ] . 2 3 . П у с т ь А — это К п е р в ы х э л е м е н т о в м а с с и в а X, а В — п о с л е д н и х N — К. Н е о б х о д и м о из м а с с и в а АВ получить м а с с и в ВА. Пусть есть подпрограмма REVERSE (i, j), к о т о р а я р е в е р с и р у е т ( м е н я е т п о р я д о к э л е м е н т о в на о б р а т н ы й ) ч а с т ь м а с с и в а X с и н д е к с а м и от i д о / . Н а ч а в с м а с с и в а АВ, р е в е р с и р у е м ч а с т ь А, полу­ ч а е м (А ) В; р е в е р с и р у е м В, п о л у ч а е м (А')(В ); реверси­ р у е м в е с ь м а с с и в , п о л у ч а е м ((A )(B )) — BA. П р о д е м о н с т р и р у е м о п и с а н н ы й а л г о р и т м на п р и м е р е . П у с т ь X е с т ь п о с л е д о в а т е л ь н о с т ь 1, 2, 3, 4, 5, /С==3: R E V E R S E (1, К); ( 3 , 2, 1, 4, 5} R E V E R S E ( K - f 1, N ) ; {3, 2, 1, 5, 4} R E V E R S E (1, К); {4, 5, 1, 2, 3} г Г r r r
Глава 3 . А Л Г О Р И Т М Ы Ц Е Л О Ч И С Л Е Н Н О Й АРИФМЕТИКИ § 1. П О И С К Д Е Л И Т Е Л Е Й Ч И С Л А . ПРОСТЫЕ ЧИСЛА Н а т у р а л ь н о е ч и с л о Ъ н а з ы в а ю т делителем натураль­ ного ч и с л а а, е с л и а п р е д с т а в и м о в в и д е п р о и з в е д е н и я a —be, (1) где с — н а т у р а л ь н о е ч и с л о . В э т о м с л у ч а е г о в о р я т , что ч и с л о а д е л и т с я б е з о с т а т к а на ч и с л о Ь, и л и , к о р о ч е , ч и с л о а д е л и т с я на ч и с л о Ь. И з ф о р м у л ы ( 1 ) с л е д у е т , что ч и с л о а д е л и т с я т а к ж е на ч и с л о с, т. е. с — д е л и т е л ь ч и с л а а. Н а п р и м е р , 1 5 = 3 • 5, 3 и 5 — д е л и т е л и ч и с л а 15. Число 1 является делителем любого натурального ч и с л а , п о с к о л ь к у л ю б о е н а т у р а л ь н о е ч и с л о д е л и т с я на 1 (а:1=а). Ч и с л о , д е л я щ е е с я на 2, н а з ы в а ю т четным; ч и с л о , не д е л я щ е е с я на 2, н а з ы в а ю т нечетным. Кратным ч и с л а b н а з ы в а ю т ч и с л о а, к о т о р о е д е л и т с я на Ь. М н о ж е с т в о ч и с е л , к р а т н ы х д а н н о м у ч и с л у Ь, б е с к о ­ нечно. В п р о г р а м м и р о в а н и и д л я о п р е д е л е н и я того, я в л я е т с я л и ч и с л о b д е л и т е л е м ч и с л а а или нет, п о л ь з у ю т с я с л е д у ю щ и м с в о й с т в о м : е с л и ч и с л о а д е л и т с я на ч и с л о Ь, то о с т а т о к от д е л е н и я р а в е н 0. е с л и m o d ( а , Ь) = 0 то Р:=«Делится» иначе | Р : = «Не делится» все (3.1) Н а т у р а л ь н о е ч и с л о а, не р а в н о е 1, н а з ы в а е т с я про­ стым, е с л и оно д е л и т с я т о л ь к о на с е б я и на 1, т. е. и м е е т 116
т о л ь к о д в а д е л и т е л я . Н а т у р а л ь н о е число, о т л и ч н о е от 1 и не я в л я ю щ е е с я п р о с т ы м , н а з ы в а е т с я составным. Другими словами, натуральное число называется состав­ н ы м , е с л и оно и м е е т б о л е е д в у х д е л и т е л е й . Ч и с л о 1 не о т н о с и т с я ни к п р о с т ы м , ни к с о с т а в н ы м ч и с л а м , по­ с к о л ь к у и м е е т л и ш ь один д е л и т е л ь . Н а и м е н ь ш и м про­ с т ы м ч и с л о м я в л я е т с я ч и с л о 2. Это е д и н с т в е н н о е четное п р о с т о е ч и с л о . О с т а л ь н ы е п р о с т ы е ч и с л а я в л я ю т с я не­ четными. Д л я того чтобы н а й т и д е л и т е л и ч и с л а а > 1 , мы д о л ж н ы п о п ы т а т ь с я д е л и т ь д а н н о е ч и с л о на в с е о т л и ч ­ н ы е от 1 ч и с л а , м е н ь ш и е а. Е с л и а не р а з д е л и л о с ь ни на одно из них, с л е д о в а т е л ь н о , оно я в л я е т с я п р о с т ы м . М а с с и в В будем использовать для хранения делите­ л е й ч и с л а а, п е р е м е н н у ю Р — д л я о п р е д е л е н и я того, п р о с т о е ч и с л о или с о с т а в н о е , п е р е м е н н у ю k — д л я обо­ з н а ч е н и я н о м е р а т е к у щ е г о д е л и т е л я ч и с л а а. Р:=«простое» В[1]: = 1 В [2]: = а к: = 2 н ц д л я i от 2 до а — 1 е с л и m o d ( a , i) = 0 то к: = к + 1 B[k]:=i Р ; . = «составное» все кц (3.2) После выполнения алгоритма первые k элементов м а с с и в а В б у д у т с о д е р ж а т ь все д е л и т е л и ч и с л а а. В п р и в е д е н н о м а л г о р и т м е м ы д е л и л и ч и с л о а на все о т л и ч н ы е от 1 ч и с л а , м е н ь ш и е а. Н а с а м о м д е л е д е л и т е л ь не м о ж е т п р е в ы ш а т ь а / 2 ( п о ч е м у ? ) . Учет э т о г о оче­ видного ф а к т а приводит к увеличению скорости работы программы в два раза. 117
А л г о р и т м (3.2), к р о м е н а х о ж д е н и я д е л и т е л е й ч и с л а а, о п р е д е л я е т , я в л я е т с я ли ч и с л о а п р о с т ы м или с о с т а в н ы м . Е с л и т р е б у е т с я т о л ь к о о п р е д е л и т ь , п р о с т о е ч и с л о или с о с т а в н о е , то д а н н ы й а л г о р и т м м о ж н о у л у ч ш и т ь . В с а ­ мом д е л е , ц и к л д л я i от 2 до а—1 в ы п о л н я е т с я а — 2 раза. О д н а к о для проверки простоты числа а доста­ точно в ы п о л н и т ь д а н н ы й ц и к л [\[а] р а з ([\[а]— целая ч а с т ь от к о р н я к в а д р а т н о г о из а). Э т о в ы т е к а е т из с л е д у ­ ю щ и х с о о б р а ж е н и й . Е с л и а — ч и с л о с о с т а в н о е , его м о ж ­ но п р е д с т а в и т ь в в и д е а = Ь-с, где b^\ja, с~^л[а. Если а д е л и т с я на Ь, то оно б у д е т д е л и т ь с я и на с. Е с л и а не д е л и т с я ни на о д н о ч и с л о , м е н ь ш е е или р а в н о е л[а, то оно не б у д е т д е л и т ь с я ни на к а к о е д р у г о е ч и с л о . Запишем а простым: алгоритм проверки, является Р: =«простое» нц д л я i от 2 до i n t ( s q r t ( а ) ) + 1 ли число (3.3) е с л и ( m o d ( a , i) = 0) и ( i < a ) то Р ; = «составное» все кц В ц и к л е Д Л Я к в е л и ч и н е int (sqrt (а)) д о б а в л е н а 1, т а к к а к з н а ч е н и е sqrt (а) я в л я е т с я в е щ е с т в е н н ы м и мо­ жет вычисляться с погрешностью. Идеей уменьшения количества выполнений цикла можно воспользоваться и для нахождения делителей ч и с л а а. П о п ы т а й т е с ь с д е л а т ь э т о с а м о с т о я т е л ь н о . Алгоритм определения простого числа можно еще у л у ч ш и т ь , е с л и о с т а н а в л и в а т ь с я с р а з у п о с л е того, к о г д а у с т а н о в и л и , что ч и с л о не я в л я е т с я п р о с т ы м (т. е. е с л и а р а з д е л и л о с ь на к а к о е - л и б о ч и с л о ) . Р : = «простое» i:=2 нц п о к а ( i < = int ( s q r t ( а ) ) + 1) и ( m o d ( a , I 118 i:=i+l i)<>0) (3.4)
. кц е с л и ( m o d ( a , i) = 0 ) и ( i < a ) то Р : = «составное» все * М н о ж е с т в о п р о с т ы х чисел я в л я е т с я б е с к о н е ч н ы м . О ч е в и д н о , что м н о ж е с т в о п р о с т ы х ч и с е л , не п р е в о с х о д я ­ щ и х н е к о т о р о г о ч и с л а JV, б у д е т к о н е ч н ы м . В о з н и к а е т в о п р о с — к а к ж е н а й т и эти п р о с т ы е ч и с л а ? М о ж н о , конечно ж е , п р о с м о т р е т ь п е р в ы е N н а т у р а л ь ­ н ы х чисел и д л я к а ж д о г о п р о в е р я т ь , я в л я е т с я л и оно простым. О д н а к о д а н н ы й метод, хоть и прост с первого в з г л я д а , не я в л я е т с я э ф ф е к т и в н ы м , т а к к а к п р о г р а м м а б у д е т р а б о т а т ь очень м е д л е н н о д а ж е д л я н е б о л ь ш и х N. (Можете проверить!) Л у ч ш е в с е г о д е л а т ь это м е т о д о м , к о т о р ы й п р е д л о ж и л Э р а т о с ф е н К и р е н с к и й (ок. 2 7 6 — 1 9 4 гг. до н. э.), д р у г Архимеда. Н а з ы в а е т с я метод — решето Эратосфена. С у т ь м е т о д а с л е д у ю щ а я : в ы п и ш е м п о д р я д все ч и с л а о т 1 до N. П е р в ы м стоит ч и с л о 1. О н о не я в л я е т с я п р о ­ с т ы м . В ы ч е р к н е м это ч и с л о . С л е д у ю щ е е ч и с л о 2. Это п р о с т о е ч и с л о . О с т а в л я е м его и в ы ч е р к и в а е м в с е ч и с л а , к р а т н ы е 2. Д л я этого д о с т а т о ч н о в ы ч е р к н у т ь к а ж д о е вто­ р о е ч и с л о , н а ч и н а я счет с 3 . П е р в ы м н е в ы ч е р к н у т ы м чис­ л о м б у д е т 3 . Э т о п р о с т о е ч и с л о . О с т а в л я е м его и в ы ч е р ­ к и в а е м все ч и с л а , к р а т н ы е 3, т. е. к а ж д о е т р е т ь е ч и с л о , н а ч и н а я с ч е т с 4. ( П р и счете н е о б х о д и м о у ч и т ы в а т ь и р а ­ нее вычеркнутые числа, поэтому некоторые числа вычер­ к и в а ю т с я в т о р о й р а з : т а к и м и ч и с л а м и б у д у т 6, 12, 18... .) П о с л е этой о п е р а ц и и п е р в ы м н е в ы ч е р к н у т ы м , а з н а ч и т п р о с т ы м , б у д е т ч и с л о 5. О с т а в л я е м это ч и с л о и в ы ч е р к и ­ в а е м все ч и с л а , к р а т н ы е 5, т. е. к а ж д о е п я т о е ч и с л о , н а ч и н а я с ч е т с 6. З а т е м п е р е х о д и м к с л е д у ю щ е м у н е в ы черкнутому числу 7 и т а к д а л е е . Таким способом мы в ы ч е р к и в а е м все с о с т а в н ы е ч и с л а , о с т а н у т с я л и ш ь п р о ­ стые. В таблице приведены результаты указанных дей­ с т в и й д л я N==50; в ы ч е р к н у т ы е ч и с л а п о д ч е р к н у т ы . 119
2 11 12 2Л со 1 4 5 6 7 8 9 10 13 14 15 J_6 17 18 19 20 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 М е т о д Э р а т о с ф е н а п о л у ч и л н а з в а н и е р е ш е т а по с л е ­ д у ю щ и м п р и ч и н а м . Д р е в н и е г р е к и р а б о ч и е з а п и с и вели з а о с т р е н н о й п а л о ч к о й на в о с к о в ы х д о щ е ч к а х . Т а к о й п а ­ л о ч к о й Э р а т о с ф е н п р о к а л ы в а л т е м е с т а , где б ы л и н а п и ­ с а н ы с о с т а в н ы е ч и с л а . П о с л е этого д о щ е ч к а с т а н о в и л а с ь п о х о ж е й на р е ш е т о . П р и м е н я я м е т о д Э р а т о с ф е н а , к а к бы о т с е и в а ю т , п р о п у с к а ю т ч е р е з р е ш е т о все с о с т а в н ы е чис­ ла и оставляют только простые. Д л я х р а н е н и я чисел с о з д а д и м м а с с и в В[1..п]. Вна­ ч а л е з а н е с е м в него ч и с л о 2 и все н е ч е т н ы е ч и с л а , т а к к а к все ч е т н ы е , к р о м е ч и с л а 2, я в л я ю т с я с о с т а в н ы ­ ми. З а т е м б у д е м з а м е н я т ь н у л я м и все ч и с л а , к р а т н ы е 3. П о с л е этого н а й д е м п е р в о е н е н у л е в о е ч и с л о п о с л е ч и с л а 3 и б у д е м з а м е н я т ь н у л я м и все ч и с л а , к р а т н ы е е м у . Т а к п р о д о л ж а е м до тех пор, п о к а не п р о с м о т р и м весь массив. N : = d i v ( ( N + l ) , 2) В[1]:==2 н ц д л я i от 2 до N | B[i]:==2*i—1 п е р в о н а ч а л ь н о е за:полнени„е массива кц :индекс п е р в о г о : обнуляемого ВП]:=0 i : = i + B[j] : обнуление чисел, : кратных текущему кц j:=j + l 120 (3.5)
нц пока ( j < = N ) | j г= j — — | 1 кц кц и ( B [ j ] = 0) :поиск очередного : ненулевого числа Этот а л г о р и т м р а б о т а е т д о с т а т о ч н о б ы с т р о . Д л я N = = 10 000 р е з у л ь т а т п о л у ч а е т с я ч е р е з 3 с е к у н д ы ( д л я IBM PS/2 — 286). О д н а к о у него е с т ь один н е д о с т а т о к : д л я х р а н е н и я всех ч и с е л т р е б у е т с я м а с с и в с л и ш к о м б о л ь ш о й р а з м е р н о с т и (5000 э л е м е н т о в д л я / V = 10 000). Поэтому можно воспользоваться другим алгоритмом, к о т о р ы й р а б о т а е т м е д л е н н е е , о д н а к о не т р е б у е т с о х р а н е ­ ния в м а с с и в е всех н е ч е т н ы х ч и с е л . В массиве будем хранить только простые числа. В н а ч а л е в м а с с и в п о м е с т и м ч и с л о 2. Р а с с м а т р и в а я о ч е р е д н о е н е ч е т н о е ч и с л о X, б у д е м д е л и т ь его на п р е д ш е ­ с т в у ю щ и е е м у п р о с т ы е ч и с л а . И е с л и ни на о д н о из п р е д ш е с т в у ю щ и х п р о с т ы х чисел т е к у щ е е не д е л и т с я , то оно с а м о я в л я е т с я п р о с т ы м . П р о в е р к у на д е л и м о с т ь ч и с л а н у ж н о з а к а н ч и в а т ь п о с л е того, к а к п р о в е р е н а д е л и м о с т ь на п р о с т о е ч и с л о , не п р е в о с х о д я щ е е [sqrt (X)]. В[1]:=2 j:=2 i:=3 нц пока К = N к: = 1 d:=int(sqrt(i))+l нц пока ( B [ k ] < = d ) и (mod (i, В [ k ] ) < > 0 ) и ( k < j ) | k : = k + l кц (3.6) если В [ k ] > d то B[j]:=i ] : = j + l. все i:=i + 2 кц 121
Д а н н ы й а л г о р и т м на к о м п ь ю т е р е с 286-м п р о ц е с с о ­ р о м п р и N = = 1 0 000 в ы д а е т р е з у л ь т а т ч е р е з 12 с е к у н д . С л е д у е т о б р а т и т ь в н и м а н и е и на н е о б х о д и м о с т ь в в е д е ­ ния переменной d . В ы р а ж е н и е , значение которого при­ сваивается переменной d , можно вычислять непосредст­ венно в условии цикла, однако это удлинит работу п р о г р а м м ы д о 100 с е к у н д . ( П р о в е р ь т е и п о д у м а й т е , почему т а к происходит.)* Вопросы для 1. 2. 3. 4. повторения Как о п р е д е л и т ь , д е л и т с я л и д а н н о е ч и с л о а на ч и с л о 6? Как найти в с е д е л и т е л и числа? Как о п р е д е л и т ь , я в л я е т с я ли ч и с л о п р о с т ы м ? Как п о л у ч и т ь в с е п р о с т ы е ч и с л а , н е п р е в о с х о д я щ и е д а н н о г о ч и с л а N1 § 2. Р А З Л О Ж Е Н И Е Ч И С Л А НА МНОЖИТЕЛИ ПРОСТЫЕ Всякое число можно представить в виде произведе­ ния простых множителей, причем т а к о е представление я в л я е т с я единственным с точностью до порядка сомно­ ж и т е л е й . Этот ф а к т , н а з ы в а е м ы й основной т е о р е м о й а р и ф м е т и к и , и з в е с т е н из к у р с а м а т е м а т и к и 6-го к л а с с а . Н а п о м н и м а л г о р и т м р а з л о ж е н и я ч и с л а на п р о с т ы е м н о ­ жители. Пусть число о р а з л о ж е н о в произведение т. е. a = PiP ---Pk2 ... р\Р ---Рь 2 (2) Н а х о д и т ь Pi б у д е м по с л е д у ю щ е м у а л г о р и т м у : р а з д е ­ л и м ч и с л о а на н а и м е н ь ш е е п р о с т о е ч и с л о 2, е с л и о с т а ­ т о к от д е л е н и я р а в е н 0, то р\ — 2 и ч и с л о а у м е н ь ш а е м в 2 р а з а , т. е. а: = a div 2. З а т е м о п я т ь д е л и м а на 2, е с л и р а з д е л и л о с ь , то р = 2 и а о п я т ь у м е н ь ш а е м в д в а р а з а . Т а к п р о д о л ж а е м до тех пор, п о к а а д е л и т с я на 2. Е с л и ч и с л о а не р а з д е л и л о с ь на 2, то п ы т а е м с я д е л и т ь а на с л е д у ю щ е е п р о с т о е ч и с л о 3 . Е с л и р а з д е л и л о с ь , то н а х о 2 122
дим очередное p и уменьшаем а в 3 раза. П р о д о л ж а е м т а к до тех п о р , п о к а ч и с л о д е л и т с я н а 3 . З а т е м п ы т а е м с я д е л и т ь на 5, 7, 11, ... . З а к о н ч и м т о г д а , к о г д а а = \. В к а ч е с т в е п р и м е р а р а с с м о т р и м р а з л о ж е н и е на п р о ­ с т ы е м н о ж и т е л и ч и с л а 2520. З а п и с ь б у д е м п р о и з в о д и т ь по з н а к о м о й схеме: t 2520 1260 630 315 105 35 7 1 2 2 2 3 3 5 7 2520 = 2-2-2-3-3-5-7 Д л я реализации данного алгоритма можно вначале с г е н е р и р о в а т ь все п р о с т ы е ч и с л а , не б о л ь ш и е д а н н о г о ч и с л а а, и з а т е м д е л и т ь а п о о ч е р е д н о на них. О д н а к о на п р а к т и к е это з а н и м а е т д о с т а т о ч н о в р е м е н и , к р о м е того, понадобится дополнительный массив для хранения про­ стых чисел. Несколько изменим описанный алгоритм. Данное ч и с л о б у д е м д е л и т ь на 2, а з а т е м т о л ь к о на н е ч е т н ы е ч и с л а . Е с л и к а к о е - т о нечетное ч и с л о X я в л я е т с я с о с т а в ­ н ы м , то ч и с л о а на него не р а з д е л и т с я ( т а к к а к ч и с л о а у ж е р а з д е л и л о с ь на п р о с т ы е ч и с л а , п р о и з в е д е н и е кото­ р ы х р а в н о X, и они м е н ь ш е X). П р о с т ы е м н о ж и т е л и б у д е м х р а н и т ь в м а с с и в е В, k — н о м е р т е к у щ е г о просто­ го м н о ж и т е л я , d — ч и с л о , на к о т о р о е д е л и м . к:=0 d:=2 нц пока а>1 если mod (a, d) = 0 то k : = k + l B[k]:=d а : ==div ( a , d ) (3.7) 123
иначе если d = 2 то d:==d+l иначе d:=d + 2 все все кц После выполнения данного алгоритма первые k эле­ м е н т о в м а с с и в а В б у д у т с о д е р ж а т ь п р о с т ы е ч и с л а , про­ и з в е д е н и е к о т о р ы х р а в н о а. В р а з л о ж е н и и ч и с л а на п р о с т ы е м н о ж и т е л и могут б ы т ь р а в н ы е ч и с л а . О б ъ е д и н я я р а в н ы е м н о ж и т е л и , из ф о р м у л ы (2) п о л у ч и м ф о р м у л у в и д а а = р \р 2-р т, а А (3) а где р р, р — р а з л и ч н ы е п р о с т ы е ч и с л а , а,, а, а — н е к о т о р ы е н а т у р а л ь н ы е ч и с л а . К а ж д о е из a показывает, сколько р а з входит множитель p в р а з л о ж е ­ ние ч и с л а а. П р о и з в е д е н и е в п р а в о й ч а с т и р а в е н с т в а (3) н а з ы в а ю т каноническим разложением натурального ч и с л а а. Т а к , ч и с л о 2520 из н а ш е г о п р и м е р а б у д е т з а п и с а н о с л е д у ю щ и м о б р а з о м : 2520 = 2 - 3 - 5 - 7. и 2 2 т т t t 3 Вопросы для 2 повторения 1. В с я к о е ли ч и с л о п р и р а з л о ж е н и и на п р о с т ы е м н о ж и т е л и имеет больше одного множителя? 2 . Как р а з л о ж и т ь ч и с л о на п р о с т ы е м н о ж и т е л и ? 3. П о ч е м у н е п р и м е н я ю т в и н ф о р м а т и к е а л г о р и т м раз­ л о ж е н и я на п р о с т ы е м н о ж и т е л и , и з в е с т н ы й и з курса математики? 4. Ч т о т а к о е к а н о н и ч е с к о е р а з л о ж е н и е ? 124
§ 3. П О И С К Н А И Б О Л Ь Ш Е Г О О Б Щ Е Г О ДЕЛИТЕЛЯ ( Н О Д ) И НАИМЕНЬШЕГО ОБЩЕГО КРАТНОГО ( Н О К ) Если а и Ь — два н а т у р а л ь н ы х числа и если число с т а к о в о , что а д е л и т с я на с и Ь д е л и т с я на с, т о ч и с л о с н а з ы в а ю т о б щ и м д е л и т е л е м чисел а и Ъ. П р о и з в о л ь н ы е д в а ч и с л а в с е г д а о б л а д а ю т общим делителем. Таким д е л и т е л е м я в л я е т с я ч и с л о 1. Е с л и д р у г и х о б щ и х д е л и т е ­ л е й нет, то ч и с л а а и Ь н а з ы в а ю т взаимно простыми. 3.1. Поиск НОД Ч и с л о d н а з ы в а ю т наибольшим общим делителем ( Н О Д ) чисел а и Ь, е с л и d я в л я е т с я о б щ и м д е л и т е л е м ч и с е л а и b; d д е л и т с я на л ю б о й д р у г о й о б щ и й д е л и т е л ь . Д р у г и м и с л о в а м и , d — н а и б о л ь ш и й из всех о б щ и х д е л и ­ т е л е й ч и с е л а и Ъ. В курсе математики приводился следующий алго­ ритм нахождения Н О Д . Необходимо разложить числа а и 6 на п р о с т ы е м н о ж и т е л и и з а т е м в ы б р а т ь т е из них, к о т о р ы е в х о д я т и в одно и в д р у г о е р а з л о ж е н и е . Р а с ­ с м о т р и м п р и м е р : Н О Д (2520, 2475). 2520 1260 630 315 2 2 2 3 2475 825 275 3 3 5 55 5 105 3 11 11 35 5 1 7 1 7 О б щ и е множители подчеркнуты. Н О Д (2520, 2 4 7 5 ) = = 3 . 3 - 5 = 45. Д а н н ы й а л г о р и т м на п р а к т и к е о б ы ч н о не п р и м е н я ­ е т с я , т а к к а к р а з л о ж е н и е ч и с л а на п р о с т ы е м н о ж и т е л и у ж е является достаточно трудоемкой задачей, а ведь еще п о т р е б у е т с я н а й т и с р е д и них о д и н а к о в ы е . П о э т о м у очень 125
часто д л я н а х о ж д е н и я Н О Д применяют метод, который н а з ы в а е т с я алгоритмом Евклида. Это один из с а м ы х д р е в н и х и п о п у л я р н ы х а л г о р и т ­ мов. Он описан еще в « Н а ч а л а х » Е в к л и д а . П р е ж д е чем о п и с а т ь с а м а л г о р и т м , у к а ж е м н е с к о л ь ­ ко с в о й с т в Н О Д , на к о т о р ы е о п и р а е т с я а л г о р и т м Е в к ­ лида. П у с т ь а и Ь — о т л и ч н ы е от н у л я н а т у р а л ь н ы е ч и с л а , п р и ч е м а>Ь, тогда: 1) Н О Д (a, b)=nOJX{a~b, Ь); 2) Н О Д ( а , а ) = а ; 3) Н О Д (а, 0) = а. С в о й с т в а 2 ) и 3) я в л я ю т с я Примечание. очевидными. Докажем свойство 1). Свойство будет доказано, если мы установим, что множество общих делителей чисел а и Ъ совпадает с множеством общих делителей чисел а—Ь и Ь, т. е. всякий общий делитель X чисел а и b является делителем чисел а — Ь и Ь, и наоборот. Если X— делитель а и 6, то a — kX и Ь = 1Х для некоторых k и /. Тогда a — b = (k — I) X, т. е. X является общим делителем чисел а — Ь и Ь. Наоборот, пусть a — b = mX и Ь — пХ для некоторых тип. Складывая, получаем a = ( n + /n) X. Таким образом, X является общим делителем о и Ь. Перечисленные равенства подсказывают идею алго­ р и т м а н а х о ж д е н и я Н О Д : н у ж н о от б о л ь ш е г о о т н и м а т ь м е н ь ш е е , д о тех п о р , п о к а ч и с л а не с т а н у т р а в н ы м и ( с в о й с т в о 1)), п о с л е чего Н О Д н а й д е т с я по с в о й с т в у 2). П р и м е р : Н а й т и Н О Д ( 5 3 0 , 155), а ==530, 6 = 155. а Ь 530 155 375 155 220 155 65 155 65 90 65 25 40 25 15 25 15 10 126
5 10 5 5 Алгоритм будет следующим: нц пока а < > Ь если а > Ь то а: = а —b иначе b : = b - a все кц NOD: = а (3.8) Если проанализировать работу данного алгоритма, то м о ж н о з а м е т и т ь , что о д н о и то ж е ч и с л о н у ж н о о т н и м а т ь н е с к о л ь к о р а з . Э т о г о м о ж н о и з б е ж а т ь , е с л и в м е с т о не­ с к о л ь к и х в ы ч и т а н и й н а х о д и т ь о с т а т о к от д е л е н и я б о л ь ­ ш е г о ч и с л а на м е н ь ш е е ( п о д у м а й т е п о ч е м у ) . В этом с л у ч а е с в о й с т в о 1) м о ж н о з а п и с а т ь в в и д е : Н О Д ( а , Ь) = = Н О Д ( а m o d b, b). Д л я о к о н ч а н и я р а б о т ы а л г о р и т м а н у ж н о в о с п о л ь з о в а т ь с я с в о й с т в о м 3). П р и м е р : Н а й т и Н О Д ( 5 3 0 , 155), а = 530, 6 = 1 5 5 . Ь а 530 155 65 155 65 25 15 25 15 10 5 10 5 0 Алгоритм будет выглядеть следующим образом: нц пока ( а < > 0 ) если а > Ь то а : = m o d ( а , Ь) иначе b : = mod (b, а) все кц и (Ь<>0) (3.9) 127
если а = 0 то NOD:=b иначе NOD:=a все Последний оператор Е С Л И можно заменить операто­ ром N O D : = a-(-b. П о д у м а й т е п о ч е м у . 3.2. П о и с к НОК Е с л и а и Ъ — д в а н а т у р а л ь н ы х ч и с л а и если ч и с л о с т а к о в о , что с д е л и т с я на а и с д е л и т с я н а ft, то ч и с л о с н а з ы в а ю т общим кратным ч и с е л а и Ь. П р о и з в о л ь н ы е два числа всегда обладают общим кратным. Таким к р а т н ы м я в л я е т с я ч и с л о , р а в н о е п р о и з в е д е н и ю ab. Ч и с л о d н а з ы в а ю т наименьшим общим кратным ( Н О К ) чисел а и Ь, е с л и d я в л я е т с я о б щ и м к р а т н ы м ч и с е л а и Ь; на d д е л и т с я л ю б о е д р у г о е о б щ е е к р а т н о е . Д р у г и м и с л о в а м и , d — н а и м е н ь ш е е из всех о б щ и х к р а т ­ ных ч и с е л а и Ь. Д л я нахождения Н О К можно воспользоваться алго­ р и т м о м , и з в е с т н ы м из к у р с а м а т е м а т и к и . Н у ж н о р а з ­ л о ж и т ь ч и с л а а и b на п р о с т ы е м н о ж и т е л и , а з а т е м из д в у х р а з л о ж е н и й в ы б р а т ь т е с о м н о ж и т е л и , к о т о р ы е вхо­ д я т хотя бы в одно р а з л о ж е н и е . П р и м е р : Н О К (52, 65). 52 2 65 5 26 2 13 13 13 13 1 1 52 = 2 - 2 . 1 3 ; 6 5 = 5 - 1 3 ; Н О К ( 5 2 , 6 5 ) = 2 - 2 - 1 3 - 5 = 260. О д н а к о п о л ь з о в а т ь с я э т и м а л г о р и т м о м на п р а к т и к е не с л е д у е т ( п р и ч и н ы о п и с а н ы в ы ш е ) . Д л я н а х о ж д е н и я Н О К можно воспользоваться следующим свойством: Н О К ( а , 6) = а - 6 / Н О Д ( а , Ь) ( д о к а ж и т е с а м о с т о я т е л ь н о ) . Д л я нахождения Н О Д следует воспользоваться алго­ ритмом Евклида. 128
ВОПРОСЫ ДЛЯ ПОВТОРЕНИЯ 1. ЧТО ТАКОЕ Н О Д ? 2. КАКИЕ СПОСОБЫ ВЫЧИСЛЕНИЯ Н О Д ВАМ ИЗВЕСТНЫ? 3 . ЧТО ТАКОЕ Н О К ? 4. КАК НАЙТИ Н О К ТРЕХ ЧИСЕЛ? § 4. П Р Е Д С Т А В Л Е Н И Е ВЫДЕЛЕНИЕ ЦИФР ЧИСЕЛ. ЧИСЛА В десятичной системе счисления, к а к и в любой д р у г о й п о з и ц и о н н о й с и с т е м е с ч и с л е н и я , н а т у р а л ь н о е чис­ ло может быть з а п и с а н о в виде суммы р а з р я д н ы х с л а г а ­ е м ы х , т. е. в в и д е с у м м ы е д и н и ц , д е с я т к о в , сотен, т ы с я ч и т. д. Т а к , н а п р и м е р , число 6487 с о д е р ж и т 7 е д и н и ц , 8 д е с я т к о в , 4 сотни и 6 т ы с я ч и м о ж е т б ы т ь з а п и с а н о в виде в ы р а ж е н и я : 6487 = 6-1000 + 4-100 + 8-10 + 7. Ц и ф р ы 6, 4, 8, 7 я в л я ю т с я ц и ф р а м и ч и с л а 6487, а 1000, 100, 10 — р а з р я д н ы е е д и н и ц ы . К а ж д а я р а з ­ р я д н а я е д и н и ц а я в л я е т с я с т е п е н ь ю ч и с л а 10, п о э т о м у представление числа в виде суммы р а з р я д н ы х с л а г а е ­ мых чаще з а п и с ы в а ю т т а к : 6487 = 6-10 + 4-10 + 8-10' + 7-10°. 3 2 Вид числа в левой части равенства будем н а з ы в а т ь обычным представлением числа в десятичной форме. При написании программ такие числа хранятся в стан­ д а р т н ы х ч и с л о в ы х т и п а х , н а п р и м е р : Ц Е Л , ВЕЩ. П р и р а б о т е с ч и с л а м и в о б ы ч н о м п р е д с т а в л е н и и м ы не и м е е м возможности непосредственно о б р а щ а т ь с я к цифрам этого числа, однако иногда это б ы в а е т необходимо. Н а ­ пример, если требуется вычислить значение в ы р а ж е н и я , к о т о р о е не п о м е щ а е т с я в с т а н д а р т н о м ч и с л о в о м т и п е (100!), т о ч и с л о п р е д с т а в л я ю т в в и д е м а с с и в а ц и ф р . Т а к о е п р е д с т а в л е н и е б у д е м н а з ы в а т ь табличным пред­ ставлением числа. 5 Информатика. 8—9 нл. 129
Размещение цифр числа в массиве возможно двумя с п о с о б а м и . С в я з а н о э т о с т е м , что р а з р я д ы ч и с е л н у м е ­ руются с п р а в а налево, а число читается слева направо, поэтому цифры числа можно р а с п о л а г а т ь в массиве, н а ч и н а я с первой (старший р а з р я д ) , а можно — начиная с п о с л е д н е й ( м л а д ш и й р а з р я д ) . П о р я д о к , при котором цифра старшего разряда является первым элементом м а с с и в а , н а з о в е м прямым. Обратным назовем порядок, при котором первый элемент в массиве является цифрой младшего разряда. М о ж н о з а д а в а т ь число и к а к литерную величину, тогда мы получим доступ к к а ж д о й отдельной цифре, о д н а к о с ними, б е з п р е о б р а з о в а н и я в ч и с л о в о й тип, н е л ь ­ зя выполнять арифметические операции. Рассмотрим способы преобразования обычного пред­ ставления числа в табличное и наоборот. 4.1. П р е о б р а з о в а н и е числа из обычного представления в табличное П у с т ь з а д а н о ч и с л о в о б ы ч н о м п р е д с т а в л е н и и , не­ обходимо получить табличное представление данного числа. К а к в и д н о из п р е д с т а в л е н и я ч и с л а в в и д е с у м м ы р а з р я д н ы х слагаемых, к а ж д о е слагаемое, кроме послед­ него, р а з д е л и т с я на 10 б е з о с т а т к а . П о э т о м у о с т а т о к от д е л е н и я ч и с л а на 10 б у д е т р а в е н п о с л е д н е й ц и ф р е ч и с л а . Эту ц и ф р у мы помещаем в массив. Если мы р а з м е щ а е м в м а с с и в е ц и ф р ы ч и с л а , н а ч и н а я с п о с л е д н е й , то п е р в о ­ му элементу массива п р и с в а и в а е т с я значение получен­ ной ц и ф р ы . Е с л и р а з м е щ а е м ц и ф р ы , н а ч и н а я с п е р в о й , то п о л у ч е н н у ю ц и ф р у п о м е щ а е м в э л е м е н т м а с с и в а с ин­ дексом, равным количеству цифр в числе (количество ц и ф р н е о б х о д и м о п о д с ч и т а т ь д о того, к а к н а ч н е м п о л у ­ ч а т ь с а м и ц и ф р ы ) . Д а л е е н а х о д и м ц е л у ю ч а с т ь от д е л е ­ н и я исходного ч и с л а на 10 ( и л и , г о в о р я д р у г и м и с л о в а м и , о т б р а с ы в а е м последнюю цифру ч и с л а ) и снова на130
х о д и м о с т а т о к от д е л е н и я д а н н о г о ч и с л а на 10, э т о и б у д е т с л е д у ю щ а я ц и ф р а . Т а к п р о д о л ж а е м д о тех п о р , п о к а в ч и с л е не о с т а н е т с я ни одной ц и ф р ы . Д а н н ы й алгоритм размещает цифры числа в массив в обратном порядке. Д л я хранения цифр числа N будем и с п о л ь з о в а т ь м а с с и в В, k — н о м е р т е к у щ е й ц и ф р ы в м а с с и в е В. к:=0 нц пока N > = 1 k : = k + l В [ k ] : = m o d ( N , 10) N : = d i v ( N , 10) кц (3.10) Первые k элементов массива В содержат цифры ч и с л а N, з а п и с а н н ы е в о б р а т н о м п о р я д к е . Изменим алгоритм для получения цифр числа в пря­ мом порядке. к: = 0 L: = N нц пока L > = 1 L : = d i v ( L , 10) k : = k + l кц m:=k нц пока N > = 1 B [ k ] : = m o d ( N , 10) N : = d i v ( N , 10) k: = k — 1 кц (3.11) Первый цикл П О К А считает количество цифр в числе, второй:— получает цифры числа. П е р е м е н н а я L с л у ж и т д л я того, ч т о б ы с о х р а н и т ь з н а ч е н и е исходно­ го ч и с л а , т а к к а к в н у т р и ц и к л а п е р е м е н н а я и з м е н я е т свое з н а ч е н и е . Е с л и б ы в п е р в о м ц и к л е и с п о л ь з о в а л а с ь п е р е м е н н а я N, то п о с л е в ы п о л н е н и я ц и к л а ее з н а ч е н и е 131
р а в н я л о с ь б ы 0 ( п о ч е м у ? ) и в т о р о й ц и к л не в ы п о л н и л с я б ы ни р а з у . В п е р е м е н н о й т с о х р а н я е т с я к о л и ч е ­ с т в о ц и ф р ч и с л а , что, в о о б щ е г о в о р я , н е в с е г д а необ­ ходимо. 4.2. П р е о б р а з о в а н и е т а б л и ч н о г о представления числа в обычное Р е ш и м о б р а т н у ю з а д а ч у , т. е. п о л у ч и м о б ы ч н о е п р е д ­ с т а в л е н и е ч и с л а из т а б л и ч н о г о . Пусть некоторое число с з а д а н о своими цифрами: а = а а а ... х 2 а. 3 п Ч е р т а сверху о б о з н а ч а е т , что а а, а, а — ц и ф р ы ч и с л а a (a — ц и ф р а с т а р ш е г о р а з р я д а ) . З а ­ п и ш е м это ч и с л о в в и д е с у м м ы р а з р я д н ы х слага­ емых: и 2 3 п t а = 10 - + я а г 1 10"- А 2 2 + А .10 ' -\-... п 3 + А „ _ , • 3 10 +а . (4) л Д л я т о г о ч т о б ы п о л у ч и т ь з н а ч е н и е ч и с л а а, необходи­ мо в ы ч и с л и т ь з н а ч е н и е в ы р а ж е н и я , с т о я щ е г о в п р а в о й ч а с т и р а в е н с т в а (4). Д л я э т о г о п р о д е л а е м с л е д у ю щ и е п р е о б р а з о в а н и я : в ы н е с е м 10 з а с к о б к и из тех с л а г а е м ы х , д л я к о т о р ы х это в о з м о ж н о . а = а 10 а + а -10 - , + а -10 - а 2 г = 10(О .10"- + 1 + ...+а _ 10 а 3 2 2 а А -10"- 3 2 а А -10"- + 4 3 + + а г . . . + А » - 1 ) + п = О». З а т е м с в ы р а ж е н и е м в с к о б к а х п р о д е л а е м то ж е с а м о е , т. е. в ы н е с е м 10 з а с к о б к и из тех с л а г а е м ы х , д л я к о т о р ы х это в о з м о ж н о . П р о д о л ж и м д е й с т в о в а т ь т а к и м о б р а з о м до тех п о р , п о к а это б у д е т в о з м о ж н о : а = а 10 ~ я + а -10 - 1 + а -10 - я 2 г + . . . + а а 3 2 3 ==10(A .10 - + A .10 - + A -10''===10(10(А -10' - + А - 1 0 - + А З . 1 0 ' n 2 f ! 1 4 2 г + 3 3 й 1 4 ! 2 = 1 0 ( 1 0 - . . . (lQ(a W r 132 3 5 + я 3 г n l = я ) + 1 . . . ) + А „ _ + a ) + a ) + ...+a _ ) i _ \ 0 + а . . . + A „ _ 1 + A ) + А a. n N Я = = =
Теперь д л я вычисления значения числа а достаточно: 1) п е р в у ю ц и ф р у ч и с л а у м н о ж и т ь на 10 и к п р о и з в е ­ дению прибавить вторую цифру; 2) п о л у ч е н н у ю с у м м у у м н о ж и т ь на 10 и п р и б а в и т ь следующую цифру; 3) п у н к т 2) в ы п о л н я т ь до тех п о р , п о к а не и с п о л ь з у е м все з а д а н н ы е ц и ф р ы ч и с л а . О п и с а н н ы й в ы ш е а л г о р и т м н а з ы в а е т с я схемой Горнера. Р а б о т а а л г о р и т м а р а с с м о т р е н а д л я с л у ч а я , к о г д а цифры числа расположены в массиве в прямом (а, — цифра старшего разряда) порядке. Ч и с л о б у д е м п о л у ч а т ь в п е р е м е н н о й а. Ц и ф р ы ч и с л а х р а н я т с я в м а с с и в е В ( э л е м е н т В[1] с о д е р ж и т ц и ф р у старшего разряда). а:=0 нц д л я i от 1 до N | a:=a*10+B[i] (3.12) кц Д л я п о л у ч е н и я ч и с л а а, ц и ф р ы к о т о р о г о з а д а н ы в обратном порядке (первый элемент массива содержит ц и ф р у м л а д ш е г о р а з р я д а ) , м о ж н о в о с п о л ь з о в а т ь с я схе­ мой Г о р н е р а , н а ч и н а я о б р а б о т к у с п о с л е д н е г о э л е м е н т а массива. Можно воспользоваться и другим алгоритмом. К а ж ­ д а я ц и ф р а д о л ж н а у м н о ж а т ь с я на с о о т в е т с т в у ю щ у ю ей р а з р я д н у ю е д и н и ц у : п е р в а я — на 1, в т о р а я — на 10, т р е т ь я — на 100 и т. д. К а ж д а я с л е д у ю щ а я р а з р я д н а я е д и н и ц а в 10 р а з б о л ь ш е п р е д ы д у щ е й . Ч и с л о а б у д е м н а к а п л и в а т ь следующим образом: будем брать очеред­ н у ю ц и ф р у , у м н о ж а т ь ее на с о о т в е т с т в у ю щ у ю ей р а з р я д ­ ную е д и н и ц у и п р и б а в л я т ь п о л у ч е н н о е п р о и з в е д е н и е к у ж е н а к о п л е н н о м у числу. Р а з р я д н у ю е д и н и ц у у в е л и ­ чим в 10 р а з . Т а к п р о д о л ж а е м до тех пор, п о к а не и с п о л ь ­ зуем все цифры числа. В переменной г будем хранить значение разрядной е д и н и ц ы , ц и ф р ы ч и с л а б у д е м х р а н и т ь в м а с с и в е В. 133
r: = L н ц д л я i от 1 д о N I a: = a + B[i]*r JR:=R*10 (3.13) кц П р о а н а л и з и р у й т е а л г о р и т м ы ( 3 . 1 2 ) и (3.13) на с к о ­ рость работы (посчитайте количество выполненных арифметических операций). ВОПРОСЫ ДЛЯ ПОВТОРЕНИЯ 1. КАКОЙ ПОРЯДОК РАСПОЛОЖЕНИЯ Ц И Ф Р ЧИСЛА В МАССИВЕ НАЗЫ­ ВАЕТСЯ ПРЯМЫМ? ОБРАТНЫМ? 2 . КАК ПОЛУЧИТЬ Ц И Ф Р Ы ЧИСЛА В ОБРАТНОМ ПОРЯДКЕ? В ПРЯМОМ ПОРЯДКЕ? 3 . КАК ПОЛУЧИТЬ ЧИСЛО ИЗ МАССИВА Ц И Ф Р ? 4 . ЧТО ТАКОЕ СХЕМА ГОРНЕРА? § 5. П Е Р Е В О Д Ч И С Е Л СЧИСЛЕНИЯ ИЗ ОДНОЙ СИСТЕМЫ В ДРУГУЮ З а д а ч и п е р е в о д а чисел из о д н о й с и с т е м ы с ч и с л е н и я в д р у г у ю м о ж н о р а з д е л и т ь на д в е г р у п п ы : п е р е в о д из д е с я т и ч н о й с и с т е м ы с ч и с л е н и я в к а к у ю - т о д р у г у ю и из какой-то в десятичную ( р а с с м а т р и в а е м только позицион­ н ы е с и с т е м ы с ч и с л е н и я ) . Е с л и т р е б у е т с я , н а п р и м е р , пе­ р е в е с т и ч и с л о из т р о и ч н о й с и с т е м ы с ч и с л е н и я в с е м е ­ ричную, это можно сделать через десятичную систему с ч и с л е н и я . Е с л и д е л а т ь э т о н а п р я м у ю , то п р и д е т с я м о д е ­ л и р о в а т ь арифметические действия либо в троичной, либо в семеричной системе счисления. Д л я записи числа в любой системе счисления, кроме десятичной, мы будем пользоваться только табличным представлением числа. А л г о р и т м п е р е в о д а ч и с л а из д е с я т и ч н о й с и с т е м ы счисления в какую-то другую известен. Нужно разде­ л и т ь ч и с л о на о с н о в а н и е с и с т е м ы с ч и с л е н и я , в кото134
рую переводят, и найти остаток. Если целая часть ч а с т н о г о п о л у ч и л а с ь не р а в н о й н у л ю , то ее д е л я т на основание системы счисления. Т а к п р о д о л ж а ю т до тех п о р , п о к а ц е л а я ч а с т ь ч а с т н о г о не с т а н е т р а в н о й н у л ю . З а т е м в ы п и с ы в а ю т о с т а т к и в п о р я д к е , о б р а т н о м их п о л у ч е н и ю . Эти о с т а т к и я в л я ю т с я ц и ф р а м и и с к о м о г о числа. П р и м е р . Переведем число 345 в семеричную систе­ му с ч и с л е н и я . 3 2 5 |_7 6 Остатки выделены жирным шрифтом. 325 =643 . ш 7 По аналогии с записью числа в виде суммы р а з р я д ­ ных с л а г а е м ы х в десятичной системе счисления, в семе­ ричной системе счисления число можно з а п и с а т ь следую­ щим образом: 6437 = 6 - 7 + 4 . 7 + 3-7°. 2 1 Вообще натуральное число а в позиционной стеме счисления может быть записано следующим разом: си­ об­ a= a p - (5) n r l + a -p - n 2 2 + a p''- 3 y + ...+a _ -p li l + a, n где а а, а а — ц и ф р ы ч и с л а а, р — о с н о в а н и е системы счисления, причем 0 ^ а < р , 1 < л < : п . З а п и с ь (5) о т л и ч а е т с я от ( 4 ) т о л ь к о т е м , что о с н о в а ­ ние д е с я т и ч н о й с и с т е м ы с ч и с л е н и я 10 з а м е н и м на п р о ­ и з в о л ь н о е ч и с л о р ( о с н о в а н и е новой с и с т е м ы с ч и с л е н и я ) . и 2 ь п ; 135
Ц и ф р ы ч и с л а в новой с и с т е м е с ч и с л е н и я м о ж е м п о л у ­ ч а т ь , п о л ь з у я с ь а л г о р и т м о м (3.10), о п я т ь ж е з а м е н и в ч и с л о 10 ч и с л о м р. Ц и ф р ы ч и с л а , з а п и с а н н о г о в с и с т е м е с ч и с л е н и я с о с н о в а н и е м р, б у д у т х р а н и т ь с я в м а с с и в е В в обратном порядке. З а п и ш е м а л г о р и т м п е р е в о д а ч и с л а N из д е с я т и ч н о й с и с т е м ы с ч и с л е н и я в с и с т е м у с ч и с л е н и я с о с н о в а н и е м р: =0 нц п о к а N > = 1 k : = k + l B [ k ] : = m o d ( N , р) N : = d i v ( N , p) кц к: (3.14) С п о м о щ ь ю а л г о р и т м о в (3.10) и (3.12) м о ж н о о с у щ е ­ с т в и т ь и п е р е в о д из к а к о й - т о с и с т е м ы с ч и с л е н и я (с осно­ в а н и е м м е н ь ш е 10) в д е с я т и ч н у ю . Д л я этого н у ж н о в ы ч и с л и т ь з н а ч е н и е в ы р а ж е н и я (5) ( а л г о р и т м (3.12) или (3.13), з а м е н я я 10 на р). Ч и с л о п о л у ч и м в о б ы ч н о м п р е д с т а в л е н и и . Т а б л и ч н о е п р е д с т а в л е н и е м о ж н о полу­ чить, п р и м е н и в а л г о р и т м (3.10) к п о л у ч е н н о м у р е з у л ь ­ тату. Этот а л г о р и т м с ф о р м у л и р у й т е с а м о с т о я т е л ь н о . ВОПРОСЫ ДЛЯ ПОВТОРЕНИЯ 1. КАК ПЕРЕВЕСТИ ЧИСЛО ИЗ ДЕСЯТИЧНОЙ СИСТЕМЫ СЧИСЛЕНИЯ В КА­ КУЮ-ТО ДРУГУЮ? 2 . КАК ПЕРЕВЕСТИ ЧИСЛО В ДЕСЯТИЧНУЮ СИСТЕМУ СЧИСЛЕНИЯ? § 6. Д Е Л И М О С Т Ь ЧИСЕЛ Д л я о п р е д е л е н и я , д е л и т с я ли одно ч и с л о на д р у г о е , н у ж н о , к а к у п о м и н а л о с ь в ы ш е , н а й т и о с т а т о к от д е л е н и я одного ч и с л а на д р у г о е и п р о в е р и т ь , р а в е н л и он н у л ю . Е с л и о с т а т о к р а в е н н у л ю , то ч и с л о д е л и т с я , е с л и не р а в е н н у л ю — нет. Т а к и м о б р а з о м , п р о в е р к а на д е л и ­ м о с т ь с в о д и л а с ь к н а х о ж д е н и ю о с т а т к а от д е л е н и я одно136
го ч и с л а на д р у г о е . Д л я чисел в о б ы ч н о м п р е д с т а в л е н и и остаток находится с помощью стандартной операции m o d . П р и р е ш е н и и этой з а д а ч и в р у ч н у ю мы д е л и м о д н о ч и с л о на д р у г о е «в с т о л б и к » . Р а с с м о т р и м , к а к н а й т и о с т а т о к от д е л е н и я ч и с л а , з а д а н н о г о т а б л и ч н о , на ч и с л о в о б ы ч н о м п р е д с т а в л е н и и . В д е с я т и ч н о й с и с т е м е с ч и с л е н и я число п р е д с т а в и м о в в и д е (4) ( § 4, п. 4.2): я 1 и 2 3 а = а , . 1 0 ­ + а ­ 1 0 ­ ­ 4 ­ а . 1 0 " ­ + ­.. + а „ _ 1 0 + а„, 3 2 где а и а„ — ц и ф р ы ч и с л а а, п р и ч е м 0 ^ а , < 10, а, а, 2 3 П у с т ь н а м т р е б у е т с я н а й т и о с т а т о к от д е л е н и я ч и с л а а на ч и с л о т. П р е ж д е чем это д е л а т ь , у к а ж е м на н е к о т о р ы е свой­ с т в а о с т а т к о в . П у с т ь с, d, я — н е к о т о р ы е н а т у р а л ь н ы е числа, тогда: 1) (c + rf) mod п — ((с mod n)-\-(d m o d n)) m o d n; 2) c-d m o d n — c(d mod n) m o d n = ((c m o d n) d) m o d n; 3) c mod /i = ( ( c ' m o d «) c) mod «. d _ 1 Примечание. Докажем свойство 1). Пусть c = cu'\vn, с — = с mod я, d , = d d i v r t , d = d m o d n ; тогда с = с ­ « ­ ­ с . d = d -n-\-d ; (c + rf) mod n = (c ­n + c + d r « + ^2) " = ((£1+^1) « + c + rf ) mod я = f = ( 2 + 4) & = (( + ° d n)) mod я. Доказательства свойств 2) и 3) аналогичны. Попытайтесь доказать их самостоятельно. l 2 1 m ! o т mo 2 n c m 0 2 a 2 c 2 l 2 Q 2 m Н а й д е м о с т а т о к от д е л е н и я ч и с л а а ( п р е д с т а в л е н и е (4), п. 4.2) на ч и с л о т, п о л ь з у я с ь с в о й с т в а м и 1) и 2) ( с н а ­ ч а л а п р и м е н и м с в о й с т в о 1), з а т е м к к а ж д о м у с л а г а е м о ­ му с в о й с т в о 2)): я 1 я 2 ! 3 a m o d т = ( а ­ 1 0 ­ + а . 1 0 ­ + а з ­ 1 0 ' ­ + ­.­ + + я _ 1 • 10­4­а„) mod т = ((а • 1 0 " ) m o d т-\+ (a ­10"­ )mod т + + . . . + ( а „ _ • 10) m o d т-\-а m o d т) mod т — ( ( а , ( 1 Q " ~ ' m o d т) m o d т) -\- ( а ( 1 0 ~ m o d т) m o d m ) + + . . . + ( а „ _ | (10 mod /л) mod т ) + а„ m o d /п) m o d т . 1 2 ­ 1 п х 2 2 п 1 Ч 2 2 !37
Из последнего равенства вытекает алгоритм нахож­ д е н и я о с т а т к а . Н а х о д и м о с т а т о к от д е л е н и я о ч е р е д н о й р а з р я д н о й е д и н и ц ы на ч и с л о т, п о л ь з у я с ь с в о й с т в о м 3). У м н о ж а е м п о л у ч е н н о е ч и с л о на з н а ч е н и е ц и ф р ы , со­ ответствующей данной разрядной единице, прибавляем к т о м у , что п о л у ч и л и на п р е д ы д у щ и х ш а г а х , и с н о в а н а х о д и м о с т а т о к от д е л е н и я на т. Т а к п р о д о л ж а е м до тех п о р , пока не и с п о л ь з у е м все ц и ф р ы ч и с л а а. З н а ч е н и е и с к о м о г о о с т а т к а б у д е м н а к а п л и в а т ь в пе­ р е м е н н о й s, з н а ч е н и е о с т а т к а р а з р я д н о й е д и н и ц ы — в п е р е м е н н о й г, ц и ф р ы ч и с л а б у д у т х р а н и т ь с я в м а с с и в е В (в о б р а т н о м п о р я д к е , т. е. э л е м е н т В[1] с о о т в е т с т в у е т цифре младшего разряда). s:=0 г: = 1 н ц д л я i от 1 до N s : = m o d ( ( s + В [i]*r), m ) (3.15) r : = m o d (г* 10, m ) кц А л г о р и т м (3.15) м о ж н о п р и м е н я т ь д л я п о л у ч е н и я о с т а т к а от д е л е н и я ч и с л а а на ч и с л о т и в т о м с л у ч а е , если число с, з а д а н н о е в виде массива ц и ф р , записано в любой позиционной системе счисления ( ц и ф р ы числа д о л ж н ы быть записаны своими десятичными аналогами). Д л я э т о г о д о с т а т о ч н о ч и с л о 10 в а л г о р и т м е (3.15) з а м е ­ н и т ь о с н о в а н и е м с и с т е м ы с ч и с л е н и я р. О с т а т о к от д е л е ­ ния будет получен в десятичной системе счисления. Если е с т ь н е о б х о д и м о с т ь , его м о ж н о п е р е в е с т и в с и с т е м у с ч и с л е н и я с о с н о в а н и е м р. Д л я п о л у ч е н и я о с т а т к а от д е л е н и я м о ж н о т а к ж е в о с п о л ь з о в а т ь с я схемой Г о р н е р а . Д л я э т о г о п р е д с т а в л е ­ ние ч и с л а ((4), п. 4.2) н е о б х о д и м о п р е о б р а з о в а т ь по схеме Горнера, а затем применить свойства остатков так, как это сделано выше. ( Д а н н ы й алгоритм напишите самосто­ ятельно.) 138
ВОПРОСЫ ДЛЯ ПОВТОРЕНИЯ 1. КАКИЕ СВОЙСТВА ОСТАТКОВ ВЫ ЗНАЕТЕ? 2 . КАК НАЙТИ ОСТАТОК ОТ ДЕЛЕНИЯ ЧИСЛА, ЗАДАННОГО В ВИДЕ МАССИ­ ВА Ц И Ф Р , НА ЧИСЛО, ЗАДАННОЕ НЕПОСРЕДСТВЕННО? 3. КАК МОЖНО ИСПОЛЬЗОВАТЬ СХЕМУ ГОРНЕРА ДЛЯ НАХОЖДЕНИЯ ОСТАТКА ОТ ДЕЛЕНИЯ ЧИСЛА, ЗАДАННОГО В ВИДЕ МАССИВА Ц И Ф Р , НА ЧИСЛО, ЗАДАННОЕ НЕПОСРЕДСТВЕННО? § 7. Д Е Й С Т В И Я С М Н О Г О З Н А Ч Н Ы М И (БОЛЬШИМИ) ЧИСЛАМИ В д а н н о м п у н к т е под м н о г о з н а ч н ы м и ч и с л а м и м ы будем понимать числа, з а д а н н ы е табличным представле­ нием в десятичной системе счисления. Р а б о т а с многозначными числами п р е д п о л а г а е т моде­ лирование арифметических действий над двумя числами, з а д а н н ы м и м а с с и в а м и своих ц и ф р . Алгоритмы работы с такими массивами будут напо­ м и н а т ь з н а к о м ы е из к у р с а м а т е м а т и к и д е й с т в и я в столбик. Пусть два положительных числа А и В з а д а н ы к а к м а с с и в ы ц и ф р , п р и ч е м А[1] и В[1] с о д е р ж а т ц и ф р ы м л а д ш е г о р а з р я д а . ( П о д у м а й т е , почему т а к о й п о р я д о к ц и ф р д л я д а н н о й з а д а ч и у д о б н е е . ) Ч и с л о А с о с т о и т из N ц и ф р , а ч и с л о В — из М ц и ф р . 7.1. С л о ж е н и е м н о г о з н а ч н ы х чисел Н а й д е м с у м м у чисел А я В. Б у д е м с к л а д ы в а т ь э л е ­ менты массивов с одинаковыми номерами и хранить п о л у ч е н н ы е р е з у л ь т а т ы , к а к э л е м е н т ы м а с с и в а С. Е с л и на к а к о м ­ т о ш а г е п о л у ч и м С [ г ' ] ^ 1 0 , т о на м е с т е C[i] о с т а в л я е м о с т а т о к от д е л е н и я C[i] на 10 ( к о л и ч е с т в о е д и н и ц д а н н о г о р а з р я д а ) , а к э л е м е н т у С [/ + 1 ] п р и б а в и м 1 (перенос 1 в следующий разряд). Е с л и ч и с л о А состоит из N ц и ф р , а ч и с л о £ — из М ц и ф р , то ч и с л о С и м е е т л и б о max(N, М) ц и ф р , л и б о 139
m a x (N, M ) - f - 1 ц и ф р у . О б о з н а ч и м ч е р е з К в е л и ч и н у max(N, Л1)+1. Перед выполнением сложения следует дополнить н е з н а ч а щ и м и нулями число с меньшим количеством ц и ф р т а к , ч т о б ы к о л и ч е с т в о ц и ф р у р а в н я л о с ь . Этого м о ж н о д о с т и г н у т ь и о б н у л и в м а с с и в ы А и В до в в о д а цифр. А л г о р и т м с л о ж е н и я д в у х м н о г о з н а ч н ы х чисел б у д е т следующим: если N > M то К: = N иначе К:=М все К : = К + ! нц д л я i от I до К |СП]:=0 кц н ц д л я i от 1 до К C[i]:=A[i] + B|i|+C|i| е с л и C [ i ] > = 10 то (3.16) C[i + l ] : = C [ i - f П + 1 C [ i ] : = m o d ( C [ i ] , 10) все кц если С [ К ] = 0 то К : = К - 1 все После выполнения данного алгоритма в первых К э л е м е н т а х м а с с и в а С б у д е т х р а н и т ь с я с у м м а чисел А и В, С [ 1 ] — ц и ф р а м л а д ш е г о р а з р я д а . П о с л е д н я я п р о в е р к а п о з в о л я е т у б р а т ь н е з н а ч а щ и й н у л ь из с т а р ш е ­ го р а з р я д а ч и с л а С. 140
7.2. В ы ч и т а н и е м н о г о з н а ч н ы х чисел Д л я о п р е д е л е н н о с т и б у д е м с ч и т а т ь , что А > В. Е с л и нет, то н е о б х о д и м о п о м е н я т ь ч и с л а м е с т а м и , а р е з у л ь т а т сделать отрицательным. (Подумайте, как определить, к а к о е из чисел б о л ь ш е . ) Е с л и ч и с л о А состоит из N ц и ф р , т о г д а ч и с л о В не м о ж е т и м е т ь б о л е е чем N ц и ф р . Р а з н о с т ь б у д е т с о д е р ­ ж а т ь не б о л е е чем N ц и ф р . Н а й д е м р а з н о с т ь чисел А к В. Б у д е м в ы ч и т а т ь э л е ­ м е н т ы м а с с и в а В из э л е м е н т о в м а с с и в а А с с о о т в е т с т в у ­ ющими номерами. Полученные результаты будем хра­ н и т ь в м а с с и в е С. Е с л и на к а к о м - т о ш а г е п о л у ч и м С [ г ' ] < <С0, то к э л е м е н т у С [г] п р и б а в л я е м 10, а от э л е м е н т а С [ г + 1 ] о т н и м а е м 1 ( з а б и р а е м 1 из с л е д у ю щ е г о р а з ­ ряда). Алгоритм будет следующим: н ц д л я i от 1 до N |СП]:=0 кц н ц д л я i от 1 до N C[i]:=A[i]-B[i] если C [ i ] < 0 то С [i]: = С 10 C[i + l ] : = C [ i + все кц нц п о к а С [N] = 0 (3.17) l]-l | N : = N —1; кц Последний цикл позволяет убрать в н а ч а л е ч и с л а С. Д а н н ы й а л г о р и т м дополнений можно применять для с р а з н ы м и з н а к а м и . П о д у м а й т е , что н е з н а ч а щ и е нули после некоторых в ы ч и т а н и я чисел нужно изменить. 141
7.3*. П р о и з в е д е н и е многозначных чисел Алгоритм нахождения произведения будет заклю­ чаться в следующем: число А будем поочередно умно­ ж а т ь на к а ж д у ю из ц и ф р ч и с л а В. П о л у ч е н н ы й на д а н н о м ш а г е р е з у л ь т а т б у д е м н а к а п л и в а т ь в м а с с и в е С, п р и б а в л я я к т о м у , что у ж е п о л у ч и л и на п р е д ы д у щ и х ш а г а х . П р и у м н о ж е н и и на B[i] р е з у л ь т а т н а ч и н а е м п р и б а в л я т ь к С [г], т. е. у ч и т ы в а е м с д в и г на р а з р я д . При такой организации вычислений значения эле­ ментов массива С могут стать большими либо р а в н ы м и 10. М о ж н о п о с л е п о л у ч е н и я о ч е р е д н о г о С [/] п р о в е р я т ь его и, е с л и С [ / ] ^ 1 0 , п о с т у п а т ь т а к , к а к п о с т у п а л и при вычислении суммы. Тогда количество проверок будет р а в н о N-M. Р а з у м н е е р а з н о с по р а з р я д а м в ы п о л н и т ь п о с л е того, к о г д а в ы ч и с л е н и е п р о и з в е д е н и я з а к о н ч е н о . Количество проверок будет равно количеству цифр в п р о и з в е д е н и и А-В. Количество цифр произведения д в у х чисел не п р е в о с х о д и т K = N-\-М. (Почему?) Алгоритм ющим: вычисления произведения будет следу­ K : = N + M; н ц д л я i от 1 до К |СИ]:=0 кц н ц д л я i от 1 до М н ц д л я j от 1 до N | C[i + j - l ] : = A [ j ] * B [ i ] + C[i + j - l ] кц кц нц д л я i от 1 д о К — 1 C [ i + l ] : = C [ i + l ] + C [ i ] d i v 10; C [ i ] : = C [ i ] m o d 10; кц нц пока C [ k ] = 0 | К : = К - 1 ; кц 142 (3.18)
Полученные алгоритмы сложения, вычитания, умно­ ж е н и я многозначных чисел м о ж н о использовать д л я м о д е л и р о в а н и я д е й с т в и й н а д ч и с л а м и в к а к о й - л и б о си­ с т е м е с ч и с л е н и я . Д л я этого н е о б х о д и м о п о м н и т ь , что е с л и у н а с с и с т е м а с ч и с л е н и я и м е е т о с н о в а н и е р , то р е д и н и ц одного р а з р я д а о б р а з у ю т е д и н и ц у нового р а з р я ­ д а . Д р у г и м и с л о в а м и , н е о б х о д и м о ч и с л о 10 в а л г о р и т м а х (3.16), (3.17), (3.18) з а м е н и т ь о с н о в а н и е м с и с т е м ы с ч и с ­ ления. Вопросы для повторения 1. КАК СЛОЖИТЬ ДВА МНОГОЗНАЧНЫХ ЧИСЛА? 2 . КАК НАЙТИ РАЗНОСТЬ ДВУХ МНОГОЗНАЧНЫХ ЧИСЕЛ? ЗАДАЧИ ДЛЯ ПОВТОРЕНИЯ 1. О п р е д е л и т ь , я в л я е т с я л и д а н н о е ч и с л о ч е т н ы м . 2. Д в а н а т у р а л ь н ы х ч и с л а н а з ы в а ю т д р у ж е с т в е н н ы ­ ми, е с л и к а ж д о е из них р а в н о с у м м е всех д е л и т е л е й другого, кроме самого этого числа. Н а й т и все п а р ы д р у ж е с т в е н н ы х ч и с е л , л е ж а щ и х в д и а п а з о н е от п д о k. 3 . Н а й т и н а т у р а л ь н о е ч и с л о из д и а п а з о н а от я д о k, которое имеет наибольшее количество делителей. 4. Р а з л о ж и т ь д р о б ь p/q на с у м м у д р о б е й в и д а 1/п. Н а п р и м е р , при р = 3 , q = 7 17 = 14~ 3 П Т Т 4- J 2 3 1 ' 5. Н а й т и все с о в е р ш е н н ы е ч и с л а , м е н ь ш и е N. Ч и с л о с о в е р ш е н н о , е с л и оно р а в н о с у м м е всех своих д е л и т е л е й , за исключением самого числа. 6. Л ю б у ю ц е л о ч и с л е н н у ю д е н е ж н у ю с у м м у , б о л ь ш у ю 7р., м о ж н о в ы п л а т и т ь б е з с д а ч и т р е ш к а м и и п я т е р к а м и ( д о к а ж и т е ) . Д л я д а н н о г о п>7 н а й т и все т а к и е ц е л ы е н е о т р и ц а т е л ь н ы е а и Ь, что З а + 56 = я . 7. С о о б щ е с т в о р о б о т о в ж и в е т по с л е д у ю щ и м з а ­ конам: 143
1) один р а з в н а ч а л е г о д а они о б ъ е д и н я ю т с я в г р у п ­ пы по 3 или по 5 р о б о т о в ; 2) з а год г р у п п а из 3 р о б о т о в с о б и р а е т 5 новых, а г р у п п а из 5 р о б о т о в с о б и р а е т 9 новых; 3) р о б о т ы о б ъ е д и н я ю т с я т а к , чтобы с о б р а т ь з а год н а и б о л ь ш е е к о л и ч е с т в о р о б о т о в ; к а ж д ы й робот ж и в е т 3 года п о с л е с б о р к и . И з в е с т н о н а ч а л ь н о е к о л и ч е с т в о р о б о т о в . Все они т о л ь к о что с о б р а н ы . Сколько роботов будет через N лет? 8. Д а н ы д в а н а т у р а л ь н ы х числа п и Ь , причем b — нечетное ч и с л о б о л ь ш е 1. О п р е д е л и т ь , что д е л а е т с л е д у ю щ и й н и ж е ф р а г м е н т программы: нц п о к а n > = b е с л и m o d (п, 2 ) = = 0 то n : = div (п, 2) иначе n: = n — b все кц если п = 0 то а : = «да» иначе а : ==«нет» все 9. Д в а д в у з н а ч н ы х ч и с л а , з а п и с а н н ы х одно за д р у ­ гим, о б р а з у ю т ч е т ы р е х з н а ч н о е ч и с л о , к о т о р о е д е л и т с я на их п р о и з в е д е н и е . Н а й т и эти ч и с л а . 10. Н а й т и н а т у р а л ь н ы е ч и с л а из о т р е з к а [я; /г], к о л и ­ чество д е л и т е л е й у к о т о р ы х я в л я е т с я п р о и з в е д е н и е м двух простых чисел. 11. Д а н о н а т у р а л ь н о е число п. Н а й т и ч е т в е р к и про144
с т ы х чисел и м е н ь ш и х п, п р и н а д л е ж а щ и х о д н о м у д е с я т к у ( н а п р и м е р 11, 13, 17, 19). 12. Д а н о н а т у р а л ь н о е ч и с л о п. В ы я с н и т ь , и м е ю т с я л и с р е д и чисел п, я - f - l , 2п ч и с л а - б л и з н е ц ы , т. е. п р о с т ы е ч и с л а , р а з н о с т ь м е ж д у к о т о р ы м и р а в н а 2. 13. Д а н о н а т у р а л ь н о е ч и с л о п. П о л у ч и т ь все ч и с л а , в з а и м н о п р о с т ы е с п и м е н ь ш е его. 14. Д а н о н а т у р а л ь н о е число п. П о л у ч и т ь все его простые делители. 15. Д а н ы н а т у р а л ь н ы е ч и с л а р и q. П о л у ч и т ь все д е л и т е л и ч и с л а р, в з а и м н о п р о с т ы е с q. 16. Н а й т и й-е п р о с т о е число в а р и ф м е т и ч е с к о й п р о ­ г р е с с и и 11, 2 1 , 3 1 , 4 1 , 5 1 , 6 1 , ... . П р и в е с т и ответ д л я k — = 1, 10, 100, 1000 и т. д. 17. С о к р а т и т ь д р о б ь а/b (а, Ъ — н а т у р а л ь н ы е ч и с л а ) . 18. Д а н ы 4 ц е л ы х ч и с л а а, Ь, с, d. Н а п и с а т ь п р о г р а м ­ му, в ы ч и с л я ю щ у ю с у м м у о б ы к н о в е н н ы х д р о б е й а/Ь-\-f-c/u* в в и д е х/у. 19. Д а н о н а т у р а л ь н о е число п. О п р е д е л и т ь к о л и ч е ­ с т в о сотен ( т ы с я ч , м и л л и о н о в ) в нем. 20. Ввести период дроби. Н а п е ч а т а т ь числитель и знаменатель. 2 1 . Н а т у р а л ь н о е число из п ц и ф р я в л я е т с я ч и с л о м А р м с т р о н г а , если с у м м а его ц и ф р , в о з в е д е н н ы х в п-ю степень, р а в н а самому числу ( 1 5 3 = l - f - 5 - j - 3 ) . Полу­ чить все ч и с л а А р м с т р о н г а д л я п — 2, 3, 4. 22. Д а н о н а т у р а л ь н о е ч и с л о п. Ч е м у р а в н а с у м м а его цифр? 2 3 . Д а н о н а т у р а л ь н о е ч и с л о п. В е р н о л и , что с у м м а ц и ф р этого ч и с л а я в л я е т с я н е ч е т н о й ? 2 4 . Д а н о н а т у р а л ь н о е ч и с л о п. В е р н о л и , что это число содержит ровно три одинаковые цифры? Если да, то у к а ж и т е эти ц и ф р ы . 2 5 . П о с ч и т а т ь с у м м у ц и ф р всех ц е л ы х чисел от I до N. 26. Д а н о н а т у р а л ь н о е число п. В ы б р о с и т ь из з а п и с и ч и с л а п все ц и ф р ы , р а в н ы е 1, о с т а в и в при этом п р е ж н и м 3 3 3 145
п о р я д о к о с т а л ь н ы х ц и ф р . Н а п р и м е р , из 5101234 ->- 50234. 27. Из записи натурального числа выбросить цифры 1 и 5, о с т а в и в п р е ж н и м п о р я д о к ц и ф р . Н а п р и м е р , ч и с л о 527012 преобразуется в число 2702. 28. Найти такие две р а з л и ч н ы е наименьшие степени натурального числа я, у которых три последние цифры одинаковы. 2 9 . Д а н о н а т у р а л ь н о е ч и с л о п. В ы б р о с и т ь из з а п и с и ч и с л а все ч е т н ы е ц и ф р ы . 3 0 . Д а н о н а т у р а л ь н о е ч и с л о п. О п р е д е л и т ь , я в л я е т с я л и оно п а л и н д р о м о м ( ч и т а е т с я о д и н а к о в о с н а ч а л а и с конца). 3 1 . Н а й т и все ч и с л а из д и а п а з о н а от п д о т, к о т о р ы е при в о з в е д е н и и в к в а д р а т д а ю т п а л и н д р о м . 3 2 . Н а й т и в с е ч и с л а - п а л и н д р о м ы из д и а п а з о н а от п д о т, к о т о р ы е п р и в о з в е д е н и и в к в а д р а т т а к ж е д а ю т палиндромы. 3 3 . Н а й т и о с т а т о к от д е л е н и я ч и с л а , з а п и с ы в а е м о г о с п о м о щ ь ю k с е м е р о к , на ч и с л о а, к и а — з а д а н н ы е натуральные числа. 34. Все н а т у р а л ь н ы е числа в ы п и с а н ы подряд, на­ ч и н а я с е д и н и ц ы . О п р е д е л и т ь , к а к а я ц и ф р а с т о и т на N-u м е с т е . 3 5 . Н а и н т е р в а л е (1000; 9 9 9 9 ) н а й т и в с е п р о с т ы е ч и с л а , к а ж д о е из к о т о р ы х о б л а д а е т т е м с в о й с т в о м , что с у м м а п е р в о й и второй ц и ф р з а п и с и этого ч и с л а р а в н а сумме третьей и четвертой. 3 6 . В ы с а д и в ш и с ь на п л а н е т е А л ь ф а , н а с е л е н н о й р а ­ з у м н ы м и « о с ь м и н о г а м и » , к о с м о н а в т ы увидели, н а п и с а н ­ н у ю на с т е н е б л и з л е ж а щ е г о с т р о е н и я ф о р м у л у 9 9 - 9 9 = = 1210. С к о л ь к о щ у п а л ь ц е в б ы л о у н а с е л я в ш и х п л а н е т у А л ь ф а «осьминогов»? 3 7 . С р е д и п р о с т ы х ч и с е л , не п р е в о с х о д я щ и х N, н а й т и такое, в двоичной записи которого м а к с и м а л ь н о е число единиц. 3 8 . Н а й т и д в о и ч н о е п р е д с т а в л е н и е д л я чисел Ф е р м а , которые представимы в виде 146 2 '+1. 2
39. З а д а н а п о с л е д о в а т е л ь н о с т ь д л и н ы N, с о с т о я щ а я из е д и н и ц и н у л е й . О п р е д е л и т ь к о л и ч е с т в о М - з н а ч н ы х д в о и ч н ы х чисел (M^N), входящих в указанную последо­ в а т е л ь н о с т ь , к о т о р ы е д е л я т с я на 2 1 . 40. Н а п е ч а т а т ь ш е с т н а д ц а т е р и ч н у ю т а б л и ц у у м н о ж е ­ н и я т а к ж е , к а к п е ч а т а ю т о б ы ч н у ю на о б л о ж к е т е т р а д и . 41. Д е с я т и ч н а я дробь определяется следующим об­ разом: [— ] abc...d[.efg...h], г д е а, Ь, с, й, е, /, g, h — д е с я т и ч н ы е ц и ф р ы от 0 д о 9, э л е м е н т ы в к в а д р а т н ы х с к о б к а х не я в л я ю т с я о б я з а т е л ь н ы м и . Н а й т и к о р е н ь у р а в н е н и я Х/А — В (А и В — д е с я т и ч н ы е д р о б и ) , п р е д с т а в и в его в в и д е д е с я т и ч н о й д р о б и , с о х р а н и в в с е ее д е с я т и ч н ы е з н а к и . 42. Н а п и с а т ь п р о г р а м м у , к о т о р а я в ы ч и с л я е т з н а ч е ­ ние в ы р а ж е н и я . l_i._L.I_... _(_!)«!. -г v ч 2 3 п Ответ представить в виде несократимой дроби где р и q — н а т у р а л ь н ы е числа. 43. Д а н а последовательность А [ 1 ] = 1, A [N + 1] = Л [N\+ p/q, 1/(Л Составить программу, в которой используются только ц е л ы е ч и с л а , д л я п е ч а т и iV-ro ч л е н а п о с л е д о в а т е л ь н о с т и в виде обыкновенной дроби. Н а п р и м е р : п р и JV = 3 д о л ж н о б ы т ь н а п е ч а т а н о 1 9 / 1 0 , п р и ЛГ = 4 д о л ж н о б ы т ь н а п е ч а т а н о 6 5 1 / 2 9 0 . 44. В ы в е с т и на э к р а н к а р т и н к у , изображающую умножение «столбиком» двух з а д а н н ы х целых чисел. 45. Н а п и с а т ь п р о г р а м м у , которая выводит картинку, и з о б р а ж а ю щ у ю умножение «столбиком» двух данных чисел. Н а п р и м е р , с о м н о ж и т е л и : 398.56, 8 5 . 0 3 . 147
39856 8503 119568 +199280 318848 338895568 Произведение: 33889.5568. 4 6 . О п р е д е л и т ь к о л и ч е с т в о п о в т о р е н и й к а ж д о й из ц и ф р 0, 1, 2, 9 в числе N , N < 1 0 0 0 . 4 7 . Н а й т и ч а с т н о е от д е л е н и я а/b с т о ч н о с т ь ю k ц и ф р п о с л е з а п я т о й . Ч и с л а а и b в в о д я т с я с не б о л е е чем 200 ц и ф р а м и . 48. Д а н ы две таблицы: М М , ..., М, ; N N , N. К а ж д ы й э л е м е н т л и б о о д н а из ц и ф р 0, 1, 9, л и б о д е с я т и ч н а я т о ч к а ( о н а п о я в л я е т с я не б о л е е одного р а з а ) . Написать алгоритм сравнения «записанных» в табли­ цу в е л и ч и н . Н а п р и м е р : N 1 2 СО ь м 3 4 1 N 0 0 0 4 0 2 0 h 2 i0 5 6 7 8 9 10 7 4 9 0 0 0 0 0 0 3 4 2 Р е з у л ь т а т : «M<.N», так как 341.749<342. 49. Д а н ы целые числа т и п ( 0 < т < П 2 , 0 < / г < 6 0 ) , у к а з ы в а ю щ и е момент времени т часов п минут. Опреде­ лить наименьшее время (число полных минут), которое д о л ж н о п р о й т и до того м о м е н т а , к о г д а ч а с о в а я и м и ­ н у т н а я с т р е л к и на ц и ф е р б л а т е совпадут; расположатся перпендикулярно друг другу. 50. Д а н ы п п о л о ж и т е л ь н ы х чисел Л , , Л , . . . , Л„ и т положительных чисел В , В , В . С у м м а всех Л,- р а в н а с у м м е всех В Д о к а з а т ь , что м о ж н о п о с т р о и т ь (и о п и с а т ь к а к ) м а с с и в С [г, / ] ; 1 1 ^ / ^ т , который удовлет­ воряет следующим требованиям: 2 { г 148 2 т
1) 2) 3) 4) все (i, j) н е о т р и ц а т е л ь н ы е ч и с л а ; в м а с с и в е по к р а й н е й м е р е ( m — 1 ) с у м м а к а ж д о й г-й с т р о к и р а в н а Ац с у м м а к а ж д о г о / - г о с т о л б ц а р а в н а В- нулей; г ЗАДАЧИ ПОВЫШЕННОЙ СЛОЖНОСТИ 1. Ч и с л о з а д а н о своим д в о и ч н ы м п р е д с т а в л е н и е м ( д л и н а ч и с л а не п р е в ы ш а е т 10 000 д в о и ч н ы х р а з р я д о в ) . Н е о б х о д и м о о п р е д е л и т ь , д е л и т с я л и ч и с л о на 15. 2. а ) К а к - т о р а з в а п т е к у д о с т а в и л и 10 ф л а к о н о в по 1000 п и л ю л ь . Н е у с п е л п р о в и з о р р а с с т а в и т ь ф л а к о н ы на п о л к е , к а к п о ч т а л ь о н п р и н е с т е л е ­ г р а м м у , в которой б ы л о с л е д у ю щ е е : «Воздержаться от п р о д а ж и л е к а р с т в а . По о ш и б к е ф а р м а ц е в т а в одном из ф л а к о н о в к а ж ­ д а я п и л ю л я с о д е р ж и т на 1 мг л е к а р с т в а б о л ь ш е допустимой дозы. Просьба незамедлительно в е р н у т ь ф л а к о н с п о в ы ш е н н о й дозой л е к а р ­ ства». Сколько взвешиваний придется сделать провизору д л я определения ф л а к о н а с повышенной дозой л е к а р с т ­ ва, если м а с с а п и л ю л и с д о п у с т и м о й дозой л е к а р с т в а р а в н а 10 мг? б) Ч е р е з к а к о е - т о в р е м я в а п т е к у д о с т а в и л и е щ е 10 ф л а к о н о в того ж е л е к а р с т в а . И на этот р а з не успели р а с п а к о в а т ь коробку с ф л а к о н а м и , как п о ч т а л ь о н п р и н е с т е л е г р а м м у с и з в е щ е н и е м о том, что на этот р а з ф а р м а ц е в т д о п у с т и л б о л е е с е р ь ­ е з н у ю о ш и б к у . В п о с ы л к е м о г л и о к а з а т ь с я от 1 до 10 ф л а к о н о в с п и л ю л я м и , к а ж д ы й из к о т о р ы х на 1 мг т я ж е л е е н о р м ы . Сколько взвешиваний придется сделать провизору в этот р а з д л я определения флаконов с повышенной дозой л е к а р с т в а ? 3 . П р е д п о л о ж и м , что у н а с е с т ь в е с ы с д в у м я ч а ш а м и и по одной ш т у к е г и р ь 1, 3, 9, 27, . . . , 3*, . . . . У р а в н о в е ­ с и т ь г р у з м а с с о й М на в е с а х . 149
4. Сосчитать количество единиц в двоичной записи ч и с л а /, з а д а н н о г о в д е с я т и ч н о й с и с т е м е с ч и с л е н и я . 5. П о с л е д о в а т е л ь н о с т ь 0 1 1 2 1 2 2 0 1 2 2 0 2 0 0 1 1 2 . . . с т р о и т ­ с я с л е д у ю щ и м о б р а з о м . С н а ч а л а п и ш е т с я 0, з а т е м повто­ ряется следующее действие: у ж е написанную часть при­ п и с ы в а ю т с п р а в а с з а м е н о й 0 на 1, 1 на 2, 2 на 0, т. е. 0-»-01 - > 0 1 1 2 - v 01121220-*... . Составить алгоритм, который по в в е д е н н о м у N ( 0 ^ N < : 2 0 0 0 0 0 0 0 0 0 ) о п р е д е л я е т , к а к о е ч и с л о с т о и т на N-м м е с т е в п о с л е д о в а т е л ь н о с т и . 6. Д а н ы м а с с и в ы X [1.. 100] и К [1 ..100]. З а п и с а т ь а л г о ­ ритм, последовательно меняющий местами значения эле­ м е н т о в X[k] и Y[k], k=l, 2, 100, не и с п о л ь з у я п р о м е ­ жуточных переменных. 7. Точки с ц е л о ч и с л е н н ы м и к о о р д и н а т а м и из 1-го к в а д ­ р а н т а п о м е ч а ю т с я ч и с л а м и из м н о ж е с т в а {0, 1, 2, . . . } . О ч е р е д н а я т о ч к а п о м е ч а е т с я в т о м с л у ч а е , е с л и все т о ч к и н и ж е и л е в е е ее у ж е п о м е ч е н ы . П р и э т о м т о ч к е приписывается минимальное число, отсутствующее в вертикали и горизонтали, проходящей через точку. Пер­ вой п о м е ч а е т с я т о ч к а (0; 0). Написать программу, которая: 1) по з а д а н н ы м к о о р д и н а т а м х и у, х^0, у^0, х, у — ц е л ы е , о п р е д е л я е т п о м е т к у точки; 2) по з а д а н н ы м к о о р д и н а т е х и п о м е т к е т о ч к и k (х^О, k^0, х, k — ц е л ы е ) о п р е д е л я е т в т о р у ю к о о р д и н а ­ ту т о ч к и . 8. Н а й т и д л и н у п е р и о д а и с а м п е р и о д д р о б и в Р-тной с и с т е м е с ч и с л е н и я , п р е д с т а в л я ю щ е й р а ц и о н а л ь н о е ч и с л о N/M ( д л я к о н е ч н ы х д р о б е й с ч и т а т ь , что д л и н а п е р и о д а р а в н а 1). М, N, Р — ц е л ы е д е с я т и ч н ы е ч и с л а , 0<iV<Af, Р > 1 . 9. Д л я в в е д е н н ы х д е й с т в и т е л ь н о г о ч и с л а г > 0 и н а ­ турального числа q необходимо найти наилучшее при­ б л и ж е н и е г в в и д е р а ц и о н а л ь н о й д р о б и p/q, г д е q^q . 10. П у с т ь з а п и с ь ч и с л а А в п о з и ц и о н н ы х с и с т е м а х max max 150
с ч и с л е н и я с о с н о в а н и е м р и q и м е е т вид п е р и о д и ч е с к о й д р о б и с п е р и о д о м 2: Л = 0 , (ab) p где бесконечной = 0, (Ьа) (*) г афЬ. Написать программу, которая для введенных р а л ь н ы х чисел р и q ( 2 < р , я < 3 0 , p>q) нату­ находит и вы­ в о д и т все в о з м о ж н ы е п а р ы з н а ч е н и й ц и ф р а и Ь, у д о в ­ л е т в о р я ю щ и х с о о т н о ш е н и ю (*). Е с л и т а к о в ы х нет, в ы в е ­ сти с о о б щ е н и е « П р и г о д н ы х ц и ф р нет». П р и м е ч а н и е . Значением числа, запись которого в позици­ онной системе счисления с основанием S есть 0, cdef (где с, d, е, f — л. ч цифры), является _ с +, _d +I _ е +. _/ . . 11. О п р е д е л и м м н о ж е с т в а K рекуррентно. Пусть / С _ [ 0 , 1]. Р а з д е л и м о т р е з о к [0, 1] на т р и ч а с т и т о ч к а м и 1/3 и 2 / 3 и у д а л и м из него и н т е р в а л ( 1 / 3 , 2 / 3 ) . П о л у ч и м м н о ж е с т в о / ( , , с о с т о я щ е е из д в у х о с т а в ш и х с я о т р е з к о в [О, 1/3] и [ 2 / 3 , 1]. К а ж д ы й из них р а з д е л и м на т р и ч а с т и ( т о ч к а м и 1/9 и 2 / 9 д л я п е р в о г о о т р е з к а и т о ч к а м и 7 / 9 и 8 / 9 — д л я второго) и удалим средние интервалы ( 1 / 9 , 2 / 9 ) и ( 7 / 9 , 8/9). Таким образом, получаем мно­ ж е с т в о /С и т. д . П у с т ь м ы п о с т р о и м м н о ж е с т в о K . П о д е л и м к а ж д ы й о с т а в ш и й с я о т р е з о к из /С,- на 3 ч а с т и и у д а л и м из э т и х с е г м е н т о в с р е д н и е и н т е р в а л ы . П о л у ­ ч и м , т а к и м о б р а з о м , из множество K . t 0 2 t i+i В в о д я т с я 3 ц е л ы х ч и с л а п, а, Ь. Н е о б х о д и м о о п р е д е ­ л и т ь , п р и н а д л е ж и т л и т о ч к а с к о о р д и н а т о й а/Ь м н о ж е ­ ству К 12. Ч и с л о н а з ы в а е т с я с о в е р ш е н н ы м , е с л и оно р а в н о с у м м е всех своих д е л и т е л е й , з а и с к л ю ч е н и е м его с а м о г о . Л ю б о е четное совершенное число представимо в виде 2 ( 2 — 1 ) , где р — простое число. Найти двоичное представление для максимального с о в е р ш е н н о г о четного ч и с л а м е н ь ш е в в е д е н н о г о N. п Р - 1 Р 151
13. З а д а н ы н а т у р а л ь н ы е ч и с л а е, k, т, t в з а п и с и х и м и ч е с к о й р е а к ц и и X A -{-Y-+Y A -\-X, г д е А, X, Y — а т о м ы или г р у п п ы а т о м о в . Н а п и с а т ь а л г о р и т м д л я п р о ­ х о ж д е н и я т а к и х н а т у р а л ь н ы х к о э ф ф и ц и е н т о в , п р и кото­ р ы х с т р е л к у м о ж н о б ы л о бы з а м е н и т ь з н а к о м р а в е н с т в а . 14. В в о д я т с я ц е л ы е ч и с л а а и Ь. П у с т ь у т р е у г о л ь н и ­ ка АБС к о о р д и н а т ы в е р ш и н Л (0; 0), В (а; Ь), а о б е к о о р д и н а т ы С (х\ у) — ц е л ы е ч и с л а , и п л о щ а д ь т р е у г о л ь ­ н и к а ABC не р а в н а н у л ю . К а к у ю м и н и м а л ь н у ю п л о щ а д ь может иметь треугольник ЛВС? 15. И м е е т с я N б а н о к с ц е л о ч и с л е н н ы м и о б ъ е м а м и V , V л и т р о в , пустой с о с у д и к р а н с водой. М о ж н о л и с п о м о щ ь ю этих б а н о к н а л и т ь в с о с у д р о в н о V л и т р о в воды? 16. В ы ч и с л и т ь ч и с л о е ( о с н о в а н и е н а т у р а л ь н о г о л о г а ­ р и ф м а ) с т о ч н о с т ь ю п з н а ч а щ и х д е с я т и ч н ы х ц и ф р после з а п я т о й . М о ж н о и с п о л ь з о в а т ь числовой р я д e k m t { n Е = = 1 + - J J + 2Т + --- + 3 4 Т + --- • 17. В ы в е с т и на э к р а н ч и с л о 2", п < 1 0 0 0 0 , п — н а т у ­ ральное. 18. В в о д и т с я N. Н е о б х о д и м о н а й т и , на с к о л ь к о н у л е й о к а н ч и в а е т с я N1 = 1 - 2 - 3 - . . . - N . 19. В в о д я т с я д в а ч и с л а N и Р. Н а й т и т а к о е м а к с и ­ м а л ь н о е ч и с л о М, что N1 д е л и т с я на Р но не д е л и т с я на Р . м у м + { П р и м е ч а н и я . 1. Числа N и Р так велики, что нет смысла считать значение N\. 2. Числа N и Р — натуральные. 2 0 . Н а т у р а л ь н о е число N> 1 п р е д с т а в и т ь в в и д е с у м м ы н а т у р а л ь н ы х с л а г а е м ы х т а к , ч т о б ы их п р о и з в е д е ­ ние б ы л о м а к с и м а л ь н ы м . 21. З а д а е т с я любое положительное действительное число R. Н а й т и п о л о ж и т е л ь н ы е д е й с т в и т е л ь н ы е /?,, R , 2 R, n Ri<4, = /?, + / ? + a 152 i=l, .••+/?«• n, т а к и е , ч т о R = R -R -... l 2 -R n =
22. В ы в е с т и в п о р я д к е в о з р а с т а н и я все о б ы к н о в е н ­ н ы е н е с о к р а т и м ы е д р о б и , з а к л ю ч е н н ы е м е ж д у 0 и 1, з н а м е н а т е л и к о т о р ы х не п р е в ы ш а ю т 15. М а с с и в при э т о м з а в о д и т ь не с л е д у е т . 23. Д а н многогранник, в в е р ш и н а х которого з а п и с а ­ ны ц е л ы е ч и с л а . О д н и м ходом м о ж н о в ы б р а т ь одно р е б р о , и к ч и с л у , з а п и с а н н о м у в одном из его к о н ц о в , п р и б а в и т ь 1, а из ч и с л а , з а п и с а н н о г о в д р у г о м к о н ц е , — в ы ч е с т ь 1. Какому необходимому и достаточному условию дол­ ж н ы удовлетворять з а п и с а н н ы е числа, чтобы с помощью т а к и х ходов м о ж н о б ы л о д о б и т ь с я , чтобы во всех в е р ш и ­ нах был одновременно записан нуль? Ответ обосновать. 24. В н у л е в о й м о м е н т в р е м е н и м а с т е р у о д н о в р е м е н н о п о с т у п а е т N р а б о т . Р а б о т ы п р о н у м е р о в а н ы от 1 до N. Д л я каждой работы i заранее известно следующее: 1) в р е м я в ы п о л н е н и я р а б о т ы t к р а т н о е с у т к а м ; 2) ш т р а ф с-, з а к а ж д ы е сутки о ж и д а н и я р а б о т ы i до м о м е н т а н а ч а л а ее в ы п о л н е н и я . Одновременно может выполняться только одна рабо­ т а , и если м а с т е р п р и с т у п а е т к в ы п о л н е н и ю н е к о т о р о й р а б о т ы , то он п р о д о л ж а е т в ы п о л н я т ь ее, п о к а не з а к о н ­ чит. С у м м а р н ы й ш т р а ф , к о т о р ы й н а д о б у д е т у п л а т и т ь , выражается следующим образом: v с у м м а с , - ( в р е м я н а ч а л а в ы п о л н е н и я р а б о т ы г) по всем L Найти такой порядок выполнения штраф оказался минимальным. работ, чтобы 2 5 . В р я д л е ж а т N а р б у з о в , п р о н у м е р о в а н н ы х от 1 до N. Н а м и з в е с т н о , что: 1) м а с с ы п е р в о г о и N-ro а р б у з о в т и m с о о т в е т с т ­ венно; х N 2) м а с с а г'-го а р б у з а т , есть с р е д н е е а р и ф м е т и ч е с к о е м а с с д в у х с о с е д н и х а р б у з о в , у в е л и ч е н н о е на d: m = d + (m .„ i i x + m )/2; i+l 153
П о в в е д е н н ы м tn m , N, d и / н а й т и т- О г р а н и ч е н и е : #<200. Необходимо в р а м к а х формулировки задачи преду­ смотреть проверку корректности данных программы. u N г ЗАДАЧИ ДЛЯ САМОСТОЯТЕЛЬНОГО РЕШЕНИЯ 1. Н а т у р а л ь н о е ч и с л о , з а п и с а н н о е в д е с я т и ч н о й с и ­ с т е м е с ч и с л е н и я , н а з ы в а е т с я с в е р х п р о с т ы м , е с л и оно остается простым при любой перестановке своих цифр. Определить, является ли данное число сверхпростым. 2. П о с л е д о в а т е л ь н о с т ь , с о с т о я щ у ю из ч е т ы р е х ц е л ы х ч и с е л а, Ь, с, d, о д н и м х о д о м м о ж н о п р е о б р а з о в а т ь в п о с л е д о в а т е л ь н о с т ь \a — b\, \b — c\, \c — d\, \d — a\. Д о к а з а т ь , что к а к о й б ы ни б ы л а н а ч а л ь н а я п о с л е д о ­ вательность, многократным повторением ходов м о ж н о п о л у ч и т ь п о с л е д о в а т е л ь н о с т ь , с о с т о я щ у ю из ч е т ы р е х нулей. 3 . Д а н о ц е л о е н е о т р и ц а т е л ь н о е ч и с л о К, не п р е в ы ш а ­ ю щ е е м и л л и о н а . Н а п е ч а т а т ь ф р а з у «К в о р о н » р у с с к и м и с л о в а м и . ( Н а п р и м е р , е с л и /С ==23, то д о л ж н о б ы т ь н а п е ­ ч а т а н о « д в а д ц а т ь т р и в о р о н ы » , е с л и К=1, то — « о д н а ворона».) 4. Н а п и с а т ь п р о г р а м м у , п е р е в о д я щ у ю з а д а н н у ю с у м ­ му в р у б л я х ( д о 3 0 0 0 0 т ы с я ч в к л ю ч и т е л ь н о ) в ее п о л н о е название. (Например: С У М М А ? 29320,25 — Д В А Д Ц А Т Ь Д Е В Я Т Ь Т Ы С Я Ч ТРИСТА ДВАДЦАТЬ РУБЛЕЙ ДВАДЦАТЬ ПЯТЬ КОПЕЕК С о к р а щ а т ь слова нельзя. 5. Н а п и с а т ь п р о г р а м м у , к о т о р а я в ы д а с т с л о в а м и н а ­ звание введенного действительного числа. ( Н а п р и м е р : 25.23 — д в а д ц а т ь пять целых д в а д ц а т ь три сотых.) 6. Ч и с л о я в л я е т с я п а л и н д р о м о м , е с л и оно ч и т а е т с я одинаково слева направо и справа налево. Рассмотрим н е к о т о р о е н а т у р а л ь н о е ч и с л о N. Е с л и э т о ч и с л о не п а л и н д р о м , то и з м е н и м п о р я д о к е г о ц и ф р на о б р а т н ы й и с л о ж и м исходное число с получившимся. Если сумма 154
не п а л и н д р о м , то н а д ней п о в т о р я е м то ж е д е й с т в и е и т. д., п о к а не п о л у ч и т с я п а л и н д р о м . Д о н а с т о я щ е г о времени неизвестно, з а в е р ш а е т с я ли этот процесс д л я л ю б о г о н а т у р а л ь н о г о N. Д а н ы н а т у р а л ь н ы е ч и с л а К, L, М (K^L). Проверить, в е р н о л и , что д л я л ю б о г о н а т у р а л ь н о г о ч и с л а из д и а п а ­ з о н а от К до L п р о ц е с с з а в е р ш а е т с я не п о з д н е е , чем п о с л е М т а к и х д е й с т в и й . Е с л и нет, то в ы д а т ь ч и с л а , д л я к о т о р ы х п р о ц е с с не з а в е р ш и л с я , и к о л и ч е с т в о т а к и х чисел. 7. В с е к в а д р а т ы н а т у р а л ь н ы х ч и с е л в ы п и с а н ы п о д ­ ряд, начиная с единицы. Определить, к а к а я цифра с т о и т на N-м м е с т е . 8. Д о к а з а т ь , что в 1 6 - р а з р я д н о й Э В М с о б ъ е м о м О З У 192 К б а й т в л ю б о й м о м е н т в р е м е н и t с у щ е с т в у ю т д в е ячейки, содержащие одинаковые числа. 9. Р и м с к и е ч и с л а . а) Проверить, правильна ли запись числа римскими цифрами. б) З а п и с а т ь д а н н о е ц е л о е ч и с л о из д и а п а з о н а от 1 д о 1999 р и м с к и м и ц и ф р а м и . в) П е р е в е с т и ч и с л о , з а п и с а н н о е р и м с к и м и ц и ф р а м и , в десятичную систему счисления. 10. М о ж н о л и р а з б и т ь в с е н а т у р а л ь н ы е ч и с л а 1, 2, 3 , 4 , 6, . . . н а д в е т а к и е в о з р а с т а ю щ и е п о с л е д о в а т е л ь н о с т и а „ а а ,... и b b , Ь , ч т о b — a = k д л я л ю б о г о k — 1, 2, 3, . . . ? П о введенному числу N определить, какому н о м е р у оно с о о т в е т с т в у е т и к а к о е ч и с л о б у д е т с ним в п а р е ( н е в ы п и с ы в а я в с е п р е д ы д у щ и е а и b ). 11. П о с л а н и е от в н е з е м н о й ц и в и л и з а ц и и п р е д с т а в л я ­ ет с о б о й н а б о р из N с и м в о л о в , к а ж д ы й из к о т о р ы х я в л я е т с я нулем или единицей. Число N я в л я е т с я про­ изведением двух простых чисел и ученые п р е д п о л а г а ю т , что э т а с т р о к а — з а к о д и р о в а н н а я п р я м о у г о л ь н а я « к а р ­ т и н к а » , р а з м е р ы к о т о р о й — м н о ж и т е л и ч и с л а N. Составить программу, которая производит перекоди­ ровку послания и печатает картинки, заменяя каждый нуль пробелом, а единицу — звездочкой. ь 3 b 2 3 k k к k 155
Пример: N = 55 Послание: 1010001011110100100000000101111010001010010010010 100100010111 12. Ч и с л а 4 6 8 1 6 и 1 6 0 1 2 5 п р е д с т а в л е н ы в р а з н ы х системах счисления с неизвестными основаниями < [ 1 0 и N^.10. С у щ е с т в у ю т ли т а к и е М и N, что эти числа равны? 13. Р а с с м о т р и м ч и с л о в у ю п о с л е д о в а т е л ь н о с т ь , о п р е ­ д е л е н н у ю с л е д у ю щ и м о б р а з о м : а, = 10, a = а + \/а если 1. м Л i + l ; ь В ы ч и с л и т ь все ц и ф р ы п е р е д з а п я т о й а юоо ч л е н а . 14. Н а п и с а т ь а л г о р и т м , к о т о р ы й д л я в е щ е с т в е н н о г о ч и с л а х н а х о д и т с у м м у х ' , где k=l, 2, 128, и с п о л ь ­ з у я не б о л е е 2 5 8 у м н о ж е н и й и 256 с л о ж е н и й , у ч и т ы в а я о п е р а ц и и о р г а н и з а ц и и ц и к л а ( в о з в е д е н и е в с т е п е н ь не использовать). 15. С о с т а в и т ь п р о г р а м м у , к о т о р а я в ы п о л н я е т с л о ж е ­ ние д в у х п я т и р а з р я д н ы х д в о и ч н ы х ч и с е л , п о л ь з у я с ь опе­ р а ц и я м и « И » , « И Л И » , « Н Е » и « С Д В И Г В Л Е В О » (на один р а з р я д ) , к о т о р ы е в ы п о л н я ю т с я т а к : 3 ) С= А ; п е р е м е н н о й С п р и с в а и в а е т с я з н а ч е н и е чис­ л а А, в к о т о р о м н у л и з а м е н я ю т с я на 1, а е д и н и ­ цы — на 0 ( О п е р а ц и я « Н Е » ) . 2) С — А\/В— п о р а з р я д н а я операция, результат вы­ полнения которой определяется таблицей 1 (Опе­ рация «ИЛИ»). ТАБЛИЦА 1 0\/0 = 0 0v 1= 1 к к 1 V 0 == 1 1V1 = 1 3) С = А/\В — п о р а з р я д н а я операция, результат вы­ п о л н е н и я которой о п р е д е л я е т с я т а б л и ц е й 2 ( О п е ­ р а ц и я «И»), 156
ТАБЛИЦА 2 0Д0 = 0 0Д1=0 1Д0 = 0 1А1 = 1 4 ) С — -*-А — п о р а з р я д н ы й с д в и г в л е в о , т. е. i-я р а з ­ ряд С получает значение ( г + 1 ) - г о разряда числа А, 5-й ( м л а д ш и й ) р а з р я д С с т а н о в и т с я р а в н ы м 0. К а ж д о е из и с х о д н ы х ч и с е л м е н ь ш е 10 0 0 0 . 16. Д л я з а д а н н о г о К н а й т и т а к о е N, что в д е с я т и ч н о м числе 2 встретится К нулей подряд. 17. П о з а д а н н о м у п с о с т а в и т ь п р о г р а м м у в ы ч и с л е н и я 2 V Оценить, для каких достаточно больших п будет работать эта программа. 18. С о с т а в и т ь п р о г р а м м у , к о т о р а я в полной з а п и с и ч и с л а 7 7 ! (77 ф а к т о р и а л ) у к а ж е т в п о р я д к е у б ы в а н и я н о м е р а р а з р я д о в , с о д е р ж а щ и х ц и ф р у 7. П р и м е ч а н и е . Разряды числа нумеруются в следующем поряд­ ке: разряд единиц имеет номер 1, десятков — 2, сотен — 3 и т. д. 19. И з з а д а н н о г о н а т у р а л ь н о г о ч и с л а в ы ч е р к н у т ь k цифр так, чтобы полученное число было возможно большим. 2 0 . Н а й т и в с е д е с я т и ч н ы е ц и ф р ы ч и с л а 100! — 2 . 2 1 . Н а п р а в и л ь н о и д у щ и х ч а с а х с 1 2 - ч а с о в ы м ци­ ферблатом имеются часовая, минутная и секундная стрелки, движущиеся плавно (без скачков). В к а к о е в р е м я все с т р е л к и о б р а з у ю т м е ж д у собой у г л ы 120°? К а к д о л г о з а с у т к и у г л ы , о б р а з о в а н н ы е м е ж д у всеми стрелками, одновременно будут в пределах от 119° д о 121°? 2 2 . З а д а н а т а б л и ц а ч и с е л . А л г о р и т м на к а ж д о м ш а г е в ы б и р а е т в этой т а б л и ц е с т р о к у ( и л и с т о л б е ц ) , с у м м а 1 0 0 157
э л е м е н т о в к о т о р о й м е н ь ш е н у л я , и у м н о ж а е т все эти э л е м е н т ы на ( — 1). Д о к а з а т ь , что а л г о р и т м не м о ж е т р а б о т а т ь б е с к о ­ нечно д о л г о . 2 3 . Д а н о н а т у р а л ь н о е ч и с л о п, я в л я ю щ е е с я к в а д р а ­ том н е к о т о р о г о д р у г о г о н а т у р а л ь н о г о ч и с л а . С о с т а в и т ь п р о г р а м м у , к о т о р а я в ы ч и с л я е т га , ис­ пользуя только операции сложения и вычитания. 24. Найти значение функции F ( 1 9 9 0 ) , вычисляемой по с л е д у ю щ е м у а л г о р и т м у : 1/2 цел а л г F ( ц е л к ) нач ц е л с, m, a l , а 2 с : = 0 ; a l : = l, а 2 : = — 3 ; т : = = 1 нц пока т < к если а 1 > 0 то с : ==c-f-m иначе с: = с — т все a l : = = a l + a2; а 2 : = = a l — а2; a l : = = a l — а2; т : = rn + 1 кц з н а ч : ==с кон П р и д у м а т ь а л г о р и т м д л я в ы ч и с л е н и я этой ф у н к ц и и , в з а п и с и к о т о р о г о не и с п о л ь з у ю т с я к о м а н д ы в е т в л е н и я и цикла. 2 5 . В ы ч и с л и т ь з н а ч е н и е ф у н к ц и и F(n) = m, г д е т — ч и с л о з н а к о в , с о д е р ж а щ и х с я в д е с я т и ч н о й з а п и с и чис­ л а га! 2 6 . И з в е с т н о , что д л я л ю б ы х н а т у р а л ь н ы х чисел а и Ь с у щ е с т в у ю т т а к и е ц е л ы е ч и с л а и и v, что с п р а ­ в е д л и в а ф о р м у л а : au-{-bv = WOJX(а, Ь). П о в в е д е н н ы м а и Ь н а й т и к а к и е - н и б у д ь и и v. 158
2 7 . В к р у г е стоит N ч е л о в е к , п р о н у м е р о в а н н ы х п о п о р я д к у от 1 д о N. П р и р а с ч е т е на п е р в ы й - в т о р о й , н а ч и н а я с п е р в о г о ч е л о в е к а , к а ж д ы й в т о р о й в ы х о д и т из к р у г а , до тех п о р , п о к а не о с т а н е т с я один ч е л о в е к . Д о к а з а т ь , что его н о м е р м о ж н о н а й т и с л е д у ю щ и м образом: представить N в двоичной системе счисления, з а т е м поставить крайний левый единичный бит числа после самого правого р а з р я д а числа. Например: N = 1 2 = 1 1 0 0 2 , номер последнего человека 1 0 0 1 = 9. 2 УКАЗАНИЯ К РЕШЕНИЮ ЗАДАЧ ПОВЫШЕННОЙ СЛОЖНОСТИ !. В с п о м н и м , что п р и з н а к о м д е л е н и я на 9 в д е с я т и ч ­ ной с и с т е м е с ч и с л е н и я я в л я е т с я д е л и м о с т ь на 9 с у м м ы цифр числа. Действительно, пусть есть число S = a„.10" + fl„_ 10' - , , 1 + . . . + a , 1 0 + flo, тогда Smod9 = (a (10"-l) + a + a„_ (10"- -l) + a _ 1 n n + I n + a , ( 1 0 — l) + a + a )mod l А т а к к а к I0 — k 0 1 + 9. 1 д е л и т с я н а 9 н а ц е л о , то и S m o d 9 = ( а + . . . + а , + а ) m o d 9. я 0 А н а л о г и ч н о п о л у ч а е м , что п р и з н а к о м д е л е н и я на 15 в с и с т е м е с ч и с л е н и я с о с н о в а н и е м 16 б у д е т д е л и м о с т ь на 15 с у м м ы всех ш е с т н а д ц а т е р и ч н ы х ц и ф р ч и с л а . Р а з б и в а е м д в о и ч н о е ч и с л о с п р а в а н а л е в о на т е т р а д ы , которые однозначно можно преобразовать в шестнадцат е р и ч н ы е ц и ф р ы , н а х о д и м их с у м м у и д е л и м ее на 15. Е с ­ л и о с т а т о к 0, то в в е д е н н о е ч и с л о д е л и т с я на 15, и н а ч е — не д е л и т с я . 2. а ) Д л я р е ш е н и я з а д а ч и не н у ж н о в з в е ш и в а т ь п и л ю л и из к а ж д о г о ф л а к о н а , т. е. п р о и з в о д и т ь 10 в з в е 159
ш и в а н и й . Д о с т а т о ч н о одного в з в е ш и в а н и я д л я о п р е д е л е ­ ния ф л а к о н а с п о в ы ш е н н о й д о з о й л е к а р с т в а . Д л я этого н е о б х о д и м о в з я т ь 1 п и л ю л ю из п е р в о г о , 2 п и л ю л и из в т о р о г о , 3 п и л ю л и из т р е т ь е г о ... 10 п и л ю л ь из д е с я т о г о ф л а к о н а . З а т е м с л е д у е т п о л о ж и т ь 5 5 ото­ б р а н н ы х п и л ю л ь на одну ч а ш у в е с о в и в з в е с и т ь их. Е с л и б ы все п и л ю л и б ы л и с д о п у с т и м о й д о з о й л е к а р с т в а , их м а с с а с о с т а в и л а б ы 550 мг. П р е д п о л о ж и м , что п и л ю л и в е с и л и 551 мг, или на 1 мг б о л ь ш е , чем с л е д у е т . Это з н а ч и т , что и м е е т с я р о в н о о д н а п и л ю л я с п о в ы ш е н н о й дозой л е к а р с т в а , а ровно одна пилюля была извлечена из п е р в о г о ф л а к о н а . Е с л и бы м а с с а 55 п и л ю л ь о к а з а л а с ь на 3 мг б о л ь ш е н о р м ы , то э т о о з н а ч а л о б ы , что с р е д и отобранных пилюль имеются 3 пилюли с повышенной д о з о й л е к а р с т в а . И х м о ж н о б ы л о и з в л е ч ь т о л ь к о из третьего флакона. Таким образом количество взвешива­ ний м о ж н о п о н и з и т ь д о 1. б) М е т о д р е ш е н и я , п о з в о л и в ш и й з а одно в з в е ш и в а н и е определить флакон, содержащий лекарства с повышен­ ной д о з о й , в д а н н о м с л у ч а е не п р и м е н и м , о д н а к о его можно модифицировать. Д л я того чтобы р е ш и т ь з а д а ч у , н е о б х о д и м о в о с п о л ь ­ з о в а т ь с я п о с л е д о в а т е л ь н о с т ь ю , к о т о р а я бы с о п о с т а в л я ­ л а к а ж д о м у ф л а к о н у о т л и ч н ы й от д р у г и х н о м е р и о б л а ­ д а л а бы еще одним дополнительным свойством: сумма членов л ю б о й ее п о д п о с л е д о в а т е л ь н о с т и д о л ж н а б ы т ь о т л и ч н о й от с у м м ы ч л е н о в л ю б о й д р у г о й ее п о д п о с л е д о ­ вательности. Примером такой последовательности может с л у ж и т ь с л е д у ю щ а я : 1, 2, 4, 8, в с е ч л е н ы ее — с т е п е ­ ни ч и с л а 2. Э т а п о с л е д о в а т е л ь н о с т ь л е ж и т в основе двоичной системы счисления. Р е ш е н и е з а д а ч и состоит в т о м , ч т о б ы в з я т ь 1 п и л ю л ю из п е р в о г о з а к о н а , 2 п и л ю л и из в т о р о г о , 4 п и л ю л и из т р е т ь е г о и т. д., з а т е м с о б р а т ь все о т о б р а н н ы е п и л ю л и и в з в е с и т ь . П р е д п о л о ж и м , что п и л ю л и о к а з а л и с ь на 27 мг т я ж е л е е , чем н у ж н о . Т а к к а к к а ж д а я п и л ю л я с п о в ы ш е н н о й д о з о й л е к а р с т в а т я ж е л е е н о р м а л ь н о й на 160
1 мг, то, р а з д е л и в 27 на 1, мы п о л у ч и м 27 — ч и с л о б о л е е тяжелых пилюль. З а п и ш е м ч и с л о 27 в д в о и ч н о й с и с т е м е : 11011. Д в о ­ ичные р а з р я д ы , в которых стоят единицы, говорят нам, к а к и е степени ч и с л а 2 в с у м м е д а ю т д в о и ч н о е ч и с л о 11011 ( и л и д е с я т и ч н о е ч и с л о 27): 1, 2, 8, 16. Е д и н и ц ы стоят в первом, втором, четвертом и пятом двоичных р а з р я д а х . Следовательно, непригодные пилюли с повы­ шенным содержанием лекарства находятся в первом, в т о р о м , ч е т в е р т о м и пятом ф л а к о н а х . 3. П р и п р е д с т а в л е н и и ч и с л а в т р о и ч н о й с и с т е м е счис­ л е н и я о б ы ч н о и с п о л ь з у ю т с я ц и ф р ы 0, 1 и 2. О д н а к о м о ж н о и с п о л ь з о в а т ь ц и ф р ы 1, 0 и — 1 . Д л я п о л у ч е н и я такой записи поступим следующим образом: будем пере­ водить М в троичную систему счисления, и к а ж д ы й раз, к о г д а при д е л е н и и на 3 б у д е т п о л у ч а т ь с я 2, б у д е м у в е л и ­ ч и в а т ь ч а с т н о е на 1, а в о с т а т к е п и с а т ь (— 1). Н а п р и м е р : 2 4 = 1000 — 10 = 1 - З + 0 - З — 1 - 3 + 0-3°. ш 3 3 3 2 ! Г р у з V п о л о ж и м на п е р в у ю ч а ш у в е с о в . Г р у з ы с ко­ э ф ф и ц и е н т о м в р а з л о ж е н и и — 1 п о с т а в и м на эту ж е ч а ш у , а г р у з ы с к о э ф ф и ц и е н т о м 1 — на д р у г у ю . О б ъ я с н и т е , почему д а н н ы й а л г о р и т м р а б о т а е т . Опишите процесс уравновешивания груза неизвест­ ной м а с с ы на ч а ш е ч н ы х в е с а х , и с п о л ь з у я ту ж е с и с т е м у гирь. 4. А л г о р и т м : cnt:=0; w h i l e ( i < > 0 ) do begin i : = ( i — 1) a n d I; cnt: = c n t + 1 ; end; Пример. {cnt — с ч е т ч и к е д и н и ц в i.} {цикл п о в т о р я е т с я ч и с л о р а з , } { р а в н о е ч и с л у е д и н и ц в i.} {«Убираем» крайнюю справа} {единицу в д в о и ч н о й з а п и с и } {числа.} 110 = / 101 = г - 1 100 = 6 Информатика, 8—9 кл. 1 a n d (t— 1) 161
5. П у с т ь а — k-i\ ч л е н п о с л е д о в а т е л ь н о с т и . Р а с с м о т ­ к р и м п о с л е д о в а т е л ь н о с т ь , ф о р м и р у е м у ю по с л е д у ю щ е м у п р а в и л у : а = 0; ф р а г м е н т а . . . а _ , , п о л у ч а е м п р и п и с ы ­ 0 ванием 0 к фрагменту а ...а^ 0 2 № ...„ справа аналогичного ф р а г м е н т а , в к о т о р о м к а ж д ы й ч л е н у в е л и ч е н на е д и н и ­ цу. П о л у ч а е м 0 - > 01 -*• 0112 01121223-к.. . Д о к а ж е м , что а е с т ь с у м м а е д и н и ц в д в о и ч н о м п р е д с т а в л е н и и ч и с л а /г. Д о к а з а т е л ь с т в о п р о в е д е м по и н д у к ц и и . Д л я а = 0 это с п р а в е д л и в о . П у с т ь п р е д п о л о ­ ж е н и е с п р а в е д л и в о д л я всех а 0 ^ г * ^ 2 * — 1 (т. е. д л я всех чисел г, с о с т о я щ и х из не б о л е е ч е м (k—1) двоич­ н ы х р а з р я д о в ) . Т о г д а в д в о и ч н о м р а з л о ж е н и и ч и с л а /, 2 * ~ 2 * , в k-ш р а з р я д е п о я в л я е т с я д о б а в о ч н а я е д и н и ­ ц а , и п о э т о м у а = 1 + « / — 2k—1. к 0 - 1 ь г В о з ь м е м а m o d 3 и п о л у ч и м ч и с л о , с т о я щ е е на г-м м е ­ сте в последовательности, описанной в условии з а д а ч и . Д л я того ч т о б ы н а й т и а,-, н е о б х о д и м о по д о к а з а н н о м у сосчитать количество единиц в двоичной записи числа i ( с м . з а д а ч у 4). 6. Б у д е м м е н я т ь м е с т а м и с о д е р ж и м о е п е р е м е н н ы х А я В. С у щ е с т в у е т н е с к о л ь к о с п о с о б о в с д е л а т ь это. 1) О п е р а т о р Значение в А Значение в В А=А + В; А + В В В = А — В\ А + В А А=А — В; В А 2) М о ж н о и с п о л ь з о в а т ь л о г и ч е с к у ю о п е р а ц и ю X O R (исключающее И Л И ) . Т а б л и ц а истинности д л я XOR следующая: ; 1XOR1=0 1XOR0=l 0 X O R 0 = 0 0XOR 1= 1 Операция XOR над двумя переменными в машине реализуется как побитовая операция над двоичным пред­ с т а в л е н и е м ч и с е л . П о э т о м у , в ч а с т н о с т и , AXORA = 0, A X O R В = В X O R А, Л X O R 0 = H. 162
Значение в В В (Л X O R S ) X O R В = =А X O R ( B X O R B ) = =AXOR0=A А=А X O R В (A X O R В) X O R Л = Л = В X O R ^ XORЛ) = B 7. Е с л и р а с с м о т р е т ь б и т о в ы е п р е д с т а в л е н и я ч и с л а Л [г, / ] , п о м е ч а ю щ е г о точку (г, / ) , и ч и с е л г и /, то о б н а р у ­ ж и в а е т с я , что Л [/', /] = i X O R / , о т к у д а п о л у ч а е т с я , что Л [г, / ] X O R / = / , Л [/, / ] X O R j = i. П о к а ж е м , что Л [г, / ] = = / X O R / . 1) Ч и с л о Л [/, / ] = / X O R / не в с т р е ч а л о с ь е щ е ни в с т р о к е i, ни в с т о л б ц е / . О т п р о т и в н о г о : с у щ е с т в у е т т а к о е / ' , что Оператор А = Л XOR В B = AXORB Значение в Л AXORB A XOR В i XOR j = i XOR XOR / XOR t = = i X O R / ' X O R i = > / ' = /; 2) П у с т ь с у щ е с т в у е т т а к о е £ < i X O R /', что & = = / X O R L — j X O R Af, и k е щ е не в с т р е ч а л о с ь в с т р о к е i и с т о л б ц е / ( н а п о м н и м , что по п р е д п о л о ж е н и ю в с е остальные у ж е заполненные элементы равны i XOR /, поэтому L>j и M>i). Т о г д а , т а к к а к M>i, то с у щ е с т в у е т б и т с н о м е р о м t т а к о й , что д л я л ю б о г о R>t биты М и i равны, t=u б и т М =\, /( = 0. Н о т а к к а к г r ( / X O R M < j X O R i, то / , = 1. Так как L > / и L X O R i — / X O R Af, то L = — / X O R Af X O R L Р а с с м о т р и м i X O R Af. В с и л у в ы ш е ­ с к а з а н н о г о д л я л ю б о г о б и т а с н о м е р о м R, R>t, ( « X O R M ) = 0, a ( i X O R A f ) , = l. r П р и этом / ; = 1 , с л е д о в а т е л ь н о для r>t ( f X O R / X O R M ) , = 0 для r=t (iXOR/XORM) = / f r и т. е. L < C / ? ! П о л у ч и л и 7 противоречие. 163
8. В в е д е м п е р е м е н н у ю N = N. П у с т ь N и М з а д а н ы в д е с я т и ч н о й с и с т е м е с ч и с л е н и я . П е р е в е д е м д р о б ь М /М в с и с т е м у с ч и с л е н и я с о с н о в а н и е м р. П у с т ь в с и с т е м е с о с н о в а н и е м р и с к о м а я д р о б ь О, а а .... Получаем: X x х х 2 а, • р ~ + 1 а • р~ 2 2 +... = NJM. У м н о ж и м п р а в у ю и л е в у ю ч а с т и р а в е н с т в а на р: а -\~ - f - а - p ~ + ... = N ~p/'М. В ы д е л я я ц е л у ю ч а с т ь в ы р а ж е н и й с л е в а и с п р а в а от з н а к а р а в е н с т в а , п о л у ч а е м : а е с т ь ц е л а я ч а с т ь от (N -p/M). О б о з н а ч и м N = N • р m o d М\ о ч е в и д н ы м о б р а з о м п о л у ч а е м а -р~ + ••• = N /M. Домнож а я на р и н а х о д я ц е л у ю ч а с т ь , о п я т ь ж е и м е е м : а е с т ь ц е л а я ч а с т ь от (N. -p/M); продолжая аналогично, опреде­ л я е м к о э ф ф и ц и е н т ы а , а , и т. д. х l 2 x х x 2 x 1 2 2 2 2 3 В ходе в ы д е л е н и я ц и ф р а,- м ы м о ж е м п о л у ч и т ь р а з ­ л и ч н ы х з н а ч е н и й N не б о л е е ч е м М (по п р и в е д е н н о м у а л г о р и т м у в ы ш е у н а с в с е г д а А / < Л/). Е с л и в д р у г к а к и е - т о д в а о с т а т к а с о в п а д а ю т : /V, == /V •, 1ф\, то с о в п а д а ю т и ц и ф р ы р а з л о ж е н и я : a = a , a = a 2> •••> т. е. ц и ф р ы (a , а/) о б р а з у ю т один из кратных периодов. Н а м надо найти минимальную длину такой периодически повторяющейся последовательности, которая равна количеству цифр между двумя б л и ж а й ­ шими повторяющимися остатками, и сами цифры. t ; i + x i + 2 J+ j + x i+x Поступаем следующим образом. Выделяем М цифр р - и ч н о й д р о б и ( и с х о д я из в ы ш е с к а з а н н о г о , к э т о м у м о ­ менту п е р и о д у ж е о б я з а н н а ч а т ь с я ) . З а п о м и н а е м N и ищем первый такой остаток N k> пг, что N == N В е л и ч и н а k—m к а к р а з и есть искомая длина периода. m b m lr 9. О б о з н а ч и м : р — ч и с л и т е л ь , а q — з н а м е н а т е л ь ис­ к о м о й д р о б и . В н а ч а л е р = 0; q= 1. Е с л и p/q м е н ь ш е г, то у в е л и ч и м ч и с л и т е л ь , е с л и p/q м е н ь ш е и с к о м о й д р о б и , то у в е л и ч и м з н а м е н а т е л ь . Е с л и p/q —г, то р е ш е н и е н а й д е ­ но. Е с л и q>q , то из всех п о л у ч е н н ы х д р о б е й в ы б и р а ­ ем ту, к о т о р а я б л и ж е всех к г. mn 164
Фрагмент программы: write ( r,qmax = );readln{r,qmax); р : = 0 ; q : . = l ; m i n : = r; REPEAT I F p / q < r T H E N p : = p + l E L S E q : = q + l; d: -=abs(r — p/q); IF d < m i n T H E N BEGIN m i n : = d;writeln(p : 7 / / ' , q ) END UNTIL ( q > = q m a x ) O R ( d = G); / / 10. Т а к к а к q<Lp, то ц и ф р ы а и b д о л ж н ы л е ж а т ь в п р е д е л а х от 0 до я — 1. Р а с п и ш е м А в с и с т е м е с о с н о в а ­ нием р: А = = 1 + Ъ + " + ' (ap + b) + -L(ар = (ар + Ь)(р- + Ь)+...= + р-* + ...) = 2 (находим сумму бесконечно убывающей п р о г р е с с и и со з н а м е н а т е л е м р~ } геометрической 2 Аналогично для А в системе с основанием ц выполня­ ется равенство Получаем (bq + а ) ( р 2 a[p(q -l)-(p -l)} 2 2 1) = (а/> + b)(q 1 = - 1), b[q(p -l)-(q -l)]. 2 2 В ы ч и с л я е м в ы р а ж е н и я в к в а д р а т н ы х с к о б к а х , обо­ з н а ч и в их с о о т в е т с т в е н н о и и v: au = bv. Н а х о д и м Н О Д (и, v) = s; о б о з н а ч и м r — a/s, f=v/t>. 165
П о л у ч а е м ar — bf, г и / в з а и м н о п р о с т ы е ч и с л а , следовательно, решениями этого равенства будут числа a = f, k b= r, k ft==l, 2, п р и э т о м м ы б е р е м т о л ь к о т е а и Ь, д л я к о т о р ы х о д н о в р е ­ м е н н о в ы п о л н я е т с я афЬ, a<Cq, b<q. Д л я н а х о ж д е н и я Н О Д и с п о л ь з у е т с я а л г о р и т м (3.8). 1 1 . Н е п о с р е д с т в е н н о е в ы ч и с л е н и е к о о р д и н а т концов отрезков, принадлежащих множеству К , и определение, п р и н а д л е ж и т л и а/b о д н о м у и з э т и х о т р е з к о в , д а е т неверный ответ д л я большинства входных данных. Это с в я з а н о с т е м , ч т о д а ж е д л я не с л и ш к о м б о л ь ш и х и з - з а ограниченного числа знаков в машинном представлении ч и с е л с п л а в а ю щ е й т о ч к о й п р о и с х о д и т п о т е р я точности при вычислении. П р и больших п вообще будет наблю­ д а т ь с я п о т е р я з н а ч и м о с т и : ч и с л о п р и д е л е н и и на 3 с т а ­ нет т а к и м м а л ы м , что в м а ш и н е оно б у д е т п р е д с т а в л я т ь ­ ся нулем. п Р а с с м о т р и м д р у г о й м е т о д р е ш е н и я этой з а д а ч и . Т а к к а к мы постоянно д о л ж н ы делить отрезки на три части, то э т о н а т а л к и в а е т на м ы с л ь и с п о л ь з о в а т ь т р о и ч н у ю систему счисления и троичные дроби. В п е р в ы й из у д а л е н н ы х и н т е р в а л о в ( 1 / 3 , 2 / 3 ) п о ­ п а д а ю т т о л ь к о т е т о ч к и х = 0, а а а ..., в троичном разло­ ж е н и и к о т о р ы х а = \, к р о м е т о ч к и 1/3 = 0, 1000...— п р а в о г о к о н ц а о т р е з к а [0, 1/3]. Т а к и м о б р а з о м , в / ( , о с т а ю т с я в с е т е т о ч к и , у к о т о р ы х а Ф\, л и б о а , = 1, а = а = ... = 0. А н а л о г и ч н о , в м н о ж е с т в е /С,-, г ' ^ 0 , с о д е р ­ ж а т с я т о ч к и , у к о т о р ы х ни о д н о из чисел а,-, 1 ^ / ^ г , не р а в н о 1, а т а к ж е т о ч к и , у д о в л е т в о р я ю щ и е у с л о в и ю : а , = = 1, / — ф и к с и р о в а н о , 1 ^ / ^ г , а Ф\, / < / , и а, = 0 д л я л ю б о г о / > / (т. е. в з а п и с и т р о и ч н о й д р о б и т о л ь к о о д н а п о з и ц и я р а в н а 1, п о с л е н е е в с е о с т а л ь н ы е п о з и ц и и нулевые. Эти дроби соответствуют п р а в ы м концам отрез­ к о в из м н о ж е с т в а /С,-). х 2 2 { х 2 3 1 З а п и с ь алгоритма на языке П а с к а л я имеет вид: 166
x : = a ; i : = l; w h i l e ( i < = n ) a n d ( x < > 1) a n d ( a < C > 0 ) do begin a : = a*3 mod b; x:=a*3divb; end; i f ( x = 1) a n d ( a < > 0 ) a n d ( n < > 0 ) then writeln ('He принадлежит') else writeln ('Принадлежит'); 12. Ч и с л о K = 2"~ (2 —l) в двоичном представлении и м е е т р е д и н и ц н р—1 н у л е й . М а к с и м а л ь н о е з н а ч е н и е р о п р е д е л я е т с я к а к [ l o g ( i V ) / 2 ] + 1. З а т е м п р о в е р я е т с я , является ли число совершенным д л я полученного значе­ н и я р. О н о я в л я е т с я с о в е р ш е н н ы м , е с л и д л я п р о с т о г о значения р число 2 — 1 я в л я е т с я простым. Д о к а ж е м этот факт. П у с т ь 2 —l = q. Д е л и т е л я м и ч и с л а К, в к л ю ч а я с а м о ч и с л о К, я в л я ю т с я с л е д у ю щ и е ч и с л а : 1 p 2 Р Р 1,2,2 ,...,2"-\ q,2q,2 q,...,2»- q. 2 2 l З а п и ш е м сумму этих делителей 1 2 + ... + 2 " - + ? ( 1 + 2 + ... + 2 " - ' ) , которая равна ( 1 + 2 + ... + 2 " - ) ( + 1 ) = ( 1 + 2 + ... + 2 " - ) . 2 ' ' . Сумма в скобках есть сумма первых р членов геометри­ ч е с к о й п р о г р е с с и и с п е р в ы м ч л е н о м 1 и з н а м е н а т е л е м 2, о н а р а в н а 2 —\ — q. Т а к и м о б р а з о м , с у м м а всех д е л и т е л е й ч и с л а К е с т ь 2 -q = 2-2"~ q, а с у м м а всех д е л и т е л е й , к р о м е с а м о г о ч и с л а K = 2 ~ q, равна 1 + 1 1 0 Р p l p { 2-2"- q-2 - q = 2 - q = K. Ч и с л о Р р а в н о с у м м е всех своих д е л и т е л е й , з а и с к л ю ­ ч е н и е м е г о с а м о г о , с л е д о в а т е л ь н о , оно я в л я е т с я с о в е р ­ шенным. l p l p l 167
Е с л и п о л у ч и л и н е с о в е р ш е н н о е ч и с л о , у м е н ь ш а е м р на 1 и снова проверяем, является ли число совершенным. С о в е р ш е н н ы е ч и с л а п о л у ч а ю т с я д л я з н а ч е н и й р, р а в ­ ных, н а п р и м е р , 2, 3, 5, 7, 13, 17, 19, 3 1 , 6 1 , 89, 107, 127. 13. З а п и ш е м у р а в н е н и е в в и д е sX A e + pY^nY A k m t + rX. П р и р а в н и в а я к о э ф ф и ц и е н т ы при X, А и У, п о л у ч а е м : X\se = k A\sk = nt (*) Y\p — nm Так как коэффициенты в формуле должны быть в з а и м н о п р о с т ы м и , то с л е д у е т н а й т и Н О Д чисел к и t ( а л г о р и т м 3.8). П у с т ь (к, t) = d. Т о г д а s(k/d) = = п (t/d), и ч и с л а k/d и t/d я в л я ю т с я в з а и м н о п р о с т ы м и , с л е д о в а т е л ь н о , n = k/d, a s = t/d. И с п о л ь з у я ф о р м у л ы (*), н а х о д и м о с т а л ь н ы е к о э ф ф и ­ циенты. 14. П о з а д а н н ы м к о о р д и н а т а м т р е х в е р ш и н мы мо­ ж е м н а й т и п л о щ а д ь т р е у г о л ь н и к а ABC: S abc = (bx — ay)/2. Е с л и а — 0, то м и н и м а л ь н а я п л о щ а д ь S = b/2, е с л и b = 0, то S = a / 2 . Е с л и ж е обе к о о р д и н а т ы о т л и ч н ы от н у л я , то из а л г о р и т м а Е в к л и д а д л я н а х о ж д е н и я Н О Д (а, Ь) с л е д у е т с у щ е с т в о в а н и е т а к и х ц е л ы х х и у, что I Ьх — иу \ = П О Д (а, Ь), и и м е н н о эти х и у м и н и м и з и р у ­ ют п л о щ а д ь т р е у г о л ь н и к а ABC. Н а х о ж д е н и е Н О Д — а л г о р и т м 3.8. 15. О б о з н а ч и м 5 = Н О Д ( V , , V„). Д о к а ж и т е , что е с л и V д е л и т с я н а ц е л о на S, то в сосуд с п о м о щ ь ю банок, м о ж н о н а л и т ь V л и т р о в в о д ы , и н а ч е — нет. 16. З а в е д е м д в а м а с с и в а : t [0..N -|- 1 ] и S [О../V-f-11. Элементы массивов — байты. В Е будем хранить теку­ щую частичную сумму mill min е „ = 1 + 1 / 1 ! + 1 / 2 ! + ... + 1 / ( й - 1 ) ! , 168 (*)
вычисленную с точностью'"JV+i знаков после запятой (в я ч е й к е E[i] х р а н и т с я з н а ч е н и е г'-го р а з р я д а п о с л е з а п я т о й , т. е. к о э ф ф и ц и е н т при 10 "'). В м а с с и в е S б у д е т х р а н и т ь с я п о с л е д н е е с л а г а е м о е ч а с т и ч н о й с у м м ы , т. е. 1 l(k—1)! ( о п я т ь ж е в S[i] н а х о д и т с я i-я ц и ф р а п о с л е з а п я т о й , все н е з н а ч а щ и е ц и ф р ы , р а з у м е е т с я , н у л и ) . О ц е н и м п о г р е ш н о с т ь ф о р м у л ы (*) с учетом р а в е н с т в а е _ 1 + 1 / 1 ! + 1/2! + . . . + + . Погрешность представления числа е будет /•' \п] = е - е а = 1 / ( « + 1 ) ! + 1 / ( я + 2)! + . . . = = 1 / ( « + 1 ) ! ( 1 + 1/(« + 2 ) + 1 / ( « + 2 ) ( « + 3) + . . . ) = = 1 / ( 1 + / г ) ! ( 1 + 1/(« + 2 ) + 1 / ( я + 2 ) + . . . ) = 2 _ _ 1 1 (л+1)! ' l _ ( n _ 1 + 2)-' ~ (П+\)\ п+ 2 ' П+\- Так как F < Ю~ , то д л я в ы ч и с л е н и я , н а п р и м е р , 1000 з н а к о в п о с л е з а п я т о й д о с т а т о ч н о С = 150 и т е р а ц и й . Б у д е м д е л и т ь ч и с л о , п р е д с т а в л е н н о е м а с с и в о м S, на о ч е р е д н о е ч и с л о k. Р е з у л ь т а т \/k\ прибавим к масси­ ву Е. С л о ж е н и е р е а л и з у е т с я т а к : 1 0 0 2 M perenos: = 0 ; {перенос из п р е д ы д у щ е г о р а з р я д а ) for i : = N + 1 d o w n to 0 do begin H Ii]: = E [ i ] + S [ i ] + p e r n i o s ; p e r e n o s : — E [i] div 10; { ф о р м и р у е м новый п е р е н о с ) E [ i ] : = E [ i ] mod 10; { к о р р е к т и р у е м E [i]} end; В ы ч и с л е н и е новых с л а г а е м ы х и с у м м и р о в а н и е п р о в о ­ дится С раз. Р а с с м о т р и м п р о ц е д у р у д е л е н и я S на К. Д е л и т ь б у д е м т а к , к а к это о б ы ч н о д е л а е т с я в р у ч н у ю — « с т о л б и к о м » : т : = 0; for i : = 0 begin { т — текущее делимое, m — Longint} to N + l do 169
m : = m * 10 -f- a [i]; a[i]:=m div к m : = = m m o d к; end; {дописываем к делимому сзади} {одну ц и ф р у } {находим о ч е р е д н у ю ц и ф р у ч а ­ стного} {и о ч е р е д н о е д е л и м о е } О б ъ я с н и т е , почему a [i] л е ж и т в п р е д е л а х от 0 до 9. П о п ы т а е м с я в ы ч и с л и т ь е , и с п о л ь з у я схему Г о р н е р а : п •.-(•••((±+')-^+')-^+-К+'С н а ч а л а п о л а г а е м Е [ 0 ] = 1; з а т е м д е л и м « с т о л б и к о м » ч и с л о , п р е д с т а в л я е м о е Е, на 450 и з а п о м и н а е м ц и ф р ы ч а с т н о г о с н о в а в Е. З а т е м в ы п о л н я е м Е [ 0 ] : = Е[0]-j- 1, д е л и м Е на 449 и т. д. О б р а т и т е в н и м а н и е на то, что во в т о р о м с п о с о б е п р и и с п о л ь з о в а н и и с х е м ы Г о р н е р а не н а д о п р о и з в о д и т ь с у м ­ м и р о в а н и е м а с с и в о в Е и S, п о э т о м у с к о р о с т ь р а б о т ы увеличивается в 2 раза. 17. В п е р е м е н н о й с т а н д а р т н о г о т и п а т а к о е б о л ь ш о е ч и с л о не п о м е с т и т с я . Б у д е м м о д е л и р о в а т ь в о з в е д е н и е 2 в с т е п е н ь п, в ы ч и с л я я п о с л е д о в а т е л ь н о 2 , 2 , 2". Ц и ф р ы п о л у ч е н н ы х на к а ж д о м ш а г е с т е п е н е й д в о й к и будем хранить в массиве. В каждой ячейке массива б у д е м х р а н и т ь по ( н а п р и м е р ) 4 д е с я т и ч н ы х ц и ф р ы ч и с л а (т. е. в э л е м е н т е Л [1] — 4 п о с л е д н и х ц и ф р ы ч и с л а ( р а з ­ р я д ы 0 — 3 ) , в Л [2] — 4 п р е д п о с л е д н и х ( р а з р я д ы 4 — 7 ) и т . д.). О ц е н и м к о л и ч е с т в о д е с я т и ч н ы х ц и ф р в ч и с л е 2", и < 1 0 0 0 . Это 10 0 0 0 . 1 o g 1 0 + К 1 5 000 ц и ф р . - К о л и ч е с т в о э л е м е н т о в м а с с и в а в о з ь м е м р а в н ы м 15 0 0 0 / 4 = 3750. В в е ­ д е м п е р е м е н н у ю Nach, в к о т о р о й б у д е м х р а н и т ь и н д е к с элемента массива Л, в котором находятся старшие зна­ чащие р а з р я д ы вычисляемого сейчас числа. П р и умно­ ж е н и и на 2 т е к у щ е г о ч и с л а б у д е м у м н о ж а т ь на 2 к а ж ­ дый элемент массива, начиная с первого и з а к а н ч и в а я э л е м е н т о м с н о м е р о м Nach. Е с л и к а к о й - т о из э л е м е н т о в м а с с и в а б о л ь ш е 9999, то п р о и з в о д и м п е р е н о с е д и н и ц ы 1 2 170 2
в следующий р а з р я д . Если был перенос единицы в р а з ­ р я д Nach -f- 1, то з н а ч е н и е п е р е м е н н о й Nach увеличим на 1. 18. М ы м о ж е м п р е д с т а в и т ь N1 в в и д е п р о и з в е д е н и я простых сомножителей: A/! = 2 ' . 3 * . 5 ' ' . 7 ' ' - . . . , ,2 ,:, 5 7 где А — п о к а з а т е л ь с т е п е н и , с которой п р о с т о е ч и с л о р в х о д и т в р а з л о ж е н и е . В и д н о , что н у л е й в к о н ц е ч и с л а р столько ж е , сколько нулей в конце произведения 2'' -5 ', но т а к к а к Л > Л , то к о л и ч е с т в о нулей р а в н о Л . Д л я того чтобы н а й т и Л , н е о б х о д и м о в ы ч и с л и т ь сумму 2 2 5 Лг 5 5 где [ ] — ц е л а я ч а с т ь ч и с л а . К а ж д о е п я т о е ч и с л о в п р о и з в е д е н и и Л'! д е л и т с я на 5, к а ж д о е д в а д ц а т ь п я т о е ч и с л о е щ е р а з д е л и т с я на 5, к а ж д о е 5 ч и с л о е щ е р а з д е л и т с я на 5 и т. д. Т а к и м о б р а з о м в (*) мы н а х о д и м , с к о л ь к о чисел в п р о и з в е д е н и и 3 N\ д е л и т с я на 5. Фрагмент программы выглядит следующим образом: к: = 5 ; s: = 0 ; repeat s : = s - j - N div k; к : = к * 5; until (k>N); После работы цикла в переменной S будет находить­ ся л . 19. Н а й д е м п р о с т ы е м н о ж и т е л и ч и с л а Р. П у с т ь это будут р р . Д л я каждого множителя p найдем число s, — с т е п е н ь , с к о т о р о й р, входит в р а з л о ж е н и е Р на п р о с т ы е с о м н о ж и т е л и . К а к и в з а д а ч е 18, н а й д е м м а к с и 5 и к t 171
м а л ы ш е числа т Т , т а к и е , что ЛП д е л и т с я на р, в степени Т но не д е л и т с я на P в степени M . Получаем для нахождения Т следующее уравнение: и К Ь T m, N\ Г д т I+L т, 0 '-p. -...-p -R 2 = Pi i i k R=N\/IP"; -P:>-...- :*I I е P М и н и м а л ь н о е из чисел m . d i v S j и д а с т и с к о м у ю сте­ п е н ь М. Рассмотрим пример: N = 1 5 , Р = 1 3 5 . Р = 3 - 3 - 3 - 5 = = 3 - 5 , = 3, = 3, /я, = 15 div 3 + 1 5 d i v ( 3 - 3 ) = 6; р = 5 , s = l , m = 1 5 d i v 5 = 3. П о л у ч а е м , что М = min {6 div 3, 3 d i v l } = 2. О б ъ я с н и т е , почему мы не м о ж е м п р и м е н и т ь ф о р м у л у 3 P L 2 SL 2 2 M = N div P + N div P + 2 JV div P 3 + ... . 20. В о с п о л ь з у е м с я т е м , что д л я N ^ i выполняется н е р а в е н с т в о N^.(N — 2 ) - 2 , т. е. р а з б и в а т ь ч и с л о на с л а г а е м ы е , б о л ь ш и е 3, не и м е е т с м ы с л а . В ы д е л я е м из ч и с л а N с л а г а е м ы е - д в о й к и , п о к а не п о л у ч и м о с т а т о к меньший либо равный 3 (остаток может быть либо 3 , л и б о 2). Т а к к а к 2 • 2 • 2 < 3 • 3 , то з а м е н и м к а ж д ы е т р и д в о й к и на д в е т р о й к и . П о л у ч е н н о е р а з л о ж е н и е и я в л я ­ ется искомым. Разберите самостоятельно случаи: 1) к о г д а н е о б х о д и м о м а к с и м и з и р о в а т ь п р о и з в е д е н и е и слагаемые в разложении числа N должны принадле­ ж а т ь п р о м е ж у т к у [А, В], А я В в в о д я т с я п о л ь з о в а т е л е м . 2) к о г д а н е о б х о д и м о м и н и м и з и р о в а т ь п р о и з в е д е н и е и слагаемые в разложении числа N должны принадле­ ж а т ь п р о м е ж у т к у [А, В], А я В в в о д я т с я п о л ь з о в а т е л е м . 2 1 . Е с л и S ^ 4 , то с у щ е с т в у ю т е д и н с т в е н н ы е Р . и R т а к и е , что Р = Р , ' Р — Р , -f- R . Б о л е е того, н а и м е н ь ш е е из Р , и R б о л ь ш е 1 и м е н ь ш е или р а в н о 2: 2 2 2 2 # = ( / ? - - \ / / ? - 4 Р )/2, Р = 2 2 (R-4) 2 = R 2 - 8Р-1-16 < Р 1< P , = 172 (р+Д/Р -4р)/2, 2 1 = ( P - V P 2 2 - 4 Р < ( Р - 2) , - 4 P ) / 2 < 2 . 2
И т а к , е с л и г < 4 , то р а з л о ж е н и е на м н о ж и т е л и з а к о н ­ чено, е с л и и н а ч е , то п р о в о д и м р а з л о ж е н и е г на д в а м н о ж и т е л я , один из них м е н ь ш е л и б о р а в е н 2 (и тем б о л е е м е н ь ш е 4), если д р у г о й м е н ь ш е 4, то п р о ц е с с не з а к о н ч е н , если и н а ч е , то п о в т о р я е м ф а к т о р и з а ц и ю R до тех п о р , п о к а не п о л у ч и м и с к о м о е р а з л о ж е н и е . 22. П у с т ь т/п — т е к у щ а я н е с о к р а т и м а я д р о б ь . П о к а ­ ж е м , к а к н а й т и с л е д у ю щ у ю по з н а ч е н и ю д р о б ь . П о н я т н о , что она б у д е т с р е д и н е с о к р а т и м ы х д р о б е й в и д а k/p, г д е р м о ж е т п р и н и м а т ь з н а ч е н и я от 2 до 15. У ч и т ы в а я у с л о в и е к/р>т/п можно для каждого р прямо вычис­ лять минимальное значение к следующим образом: k = m-p/n-\-\. П р и этом к а ж д а я д р о б ь k/p, п о л у ч е н н а я описанным выше образом, несократима. ш: = 0 ; п: = 1 repeat i : = 1; j : = 1; for p : = 2 to 15 do begin k : = m * p div n - f - 1 ; if k * j •< p * i t h e n begin i:=k; j : = p; end; end; m : = i; n : = j ; until i > = j 2 3 . Это у с л о в и е — р а в е н с т в о н у л ю с у м м ы всех чисел. М ы всегда можем «перетащить» с помощью последова­ т е л ь н о с т и ходов все н е н у л е в ы е ч и с л а , п о м е ч а ю щ и е в е р ­ ш и н ы , в о д н у к а к у ю - л и б о в е р ш и н у . Е с л и с у м м а всех чисел р а в н а 0, то п о с л е э т и х х о д о в о к а ж е т с я , что во всех в е р ш и н а х з а п и с а н 0. 24. П у с т ь и м е е т с я о п т и м а л ь н о е р а с п и с а н и е , в кото­ ром номера выполняемых работ с о в п а д а ю т с порядковы173
ми н о м е р а м и р а б о т . Т о г д а э т о м у р а с п и с а н и ю б у д е т соответствовать минимальное значение штрафа. Всякая перестановка в порядке выполнения двух или более р а б о т у ж е не м о ж е т п р и в е с т и к у м е н ь ш е н и ю ш т р а ф а , поэтому, переставив местами работы с номерами k и м ы п о л у ч и м ш т р а ф не м е н ь ш е . Обозначим через q время начала выполнения работы L С учетом п р е д с т а в л е н и я ш т р а ф а это м о ж н о з а п и ­ сать так: t k— 1 Е га CrQi + c -q k + + k i=l < I crqi + c -q' i=l k k + c k + r q' k + l I i=k + 2 + c r<!i< l i=k + 2 с гЯг З д е с ь q' и q' — время н а ч а л а выполнения соответст­ в е н н о ( & + 1 ) ­ й и k-й р а б о т ы п о с л е п е р е с т а н о в к и . З а м е ­ т и м , что k-я р а б о т а в обоих р а с п и с а н и я х в ы п о л н и т с я п о с л е того, к а к б у д у т в ы п о л н е н ы предшествующие £­1 работы, поэтому k k+l Qk — Qk+i' Qk+i — 4k-hh> В результате Qk — Qu+i + h+i — ^k + h+i- получаем: с Як+Ск+\{q -\-tkXck+\qk+Ck(qk+t x), к k k+ Алгоритм: 1) д л я всех р а б о т в ы ч и с л и т ь о т н о ш е н и е г,/с ; 2) у п о р я д о ч и т ь р а б о т ы по в о з р а с т а н и ю „этого отно­ шения. 25. В р а м к а х формулировки з а д а ч и под корректно­ с т ь ю д а н н ы х п р о г р а м м ы п о н и м а е т с я то, что м а с с а к а ж ­ дого арбуза т д о л ж н а быть положительным числом. М ы з н а е м /п, и т . П у с т ь д е й с т в и т е л ь н ы е м а с с ы а р б у з о в в ряде т Будем обозначать текущие вычисляемые м а с с ы т , ' . З а д а д и м п р о и з в о л ь н о е т' — м а с с а в т о р о г о арбуза. ; { п г 2 174
П у с т ь m' — m — s, т\ = т тогда, т а к как 2 2 tn = d + (m _ i —2-d r2-m J i i — m_ i + m )/2, l i+l m' = u +l mi — m ==( — 2-d + 2-m —m ) i т' — m =( 4 4 и т / = б! + ( т , ' _ | + т / х — 2-d-\-2-т' 3 / / 2 } то — 2-d + 2'tn' i — ( — 2-d + 2-m — т' ) — ( — 2 • я* -f- 2 • т — tn' _ i — 2 2 )/2, + 1 3 u и m ]==2s, 1 — т ] = 3s, 2 <-m„=(«--l)s. Находим р а з н о с т ь т' — т = (п—l)s. а п Вычисляем s.
Глава 4 . Р Е К У Р Р Е Н Т Н Ы Е С О О Т Н О Ш Е Н И Я И ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ § 1. П О Н Я Т И Е З А Д А Ч И И ПОДЗАДАЧИ При формулировке любой з а д а ч и необходимо опреде­ лить исходные данные, которые мы будем н а з ы в а т ь параметрами задачи. Н а п р и м е р , е с л и мы р е ш а е м з а д а ч у н а х о ж д е н и я кор­ ней к в а д р а т н о г о у р а в н е н и я ах + Ьх-\-с = 0, то эта з а д а ­ ча о п р е д е л я е т с я т р е м я п а р а м е т р а м и — к о э ф ф и ц и е н т а м и a, b и с. Е с л и ж е мы хотим р е ш и т ь з а д а ч у нахождения с р е д н е г о а р и ф м е т и ч е с к о г о н е к о т о р о г о н а б о р а чисел, то п а р а м е т р а м и з а д а ч и б у д у т к о л и ч е с т в о чисел и их з н а ­ чения. П р и э т о м н а с пока не и н т е р е с у е т к о н к р е т н ы й а л г о ­ р и т м р е ш е н и я з а д а ч и . М ы хотим н а у ч и т ь с я р е ш а т ь з а д а ­ чу, с в о д я ее к р е ш е н и ю п о д з а д а ч . З д е с ь у д о б н о д у м а т ь об а л г о р и т м е к а к о н е к о т о р о м у с т р о й с т в е или некоторой ф у н к ц и и , к о т о р ы е п р е о б р а з у ю т в х о д н ы е п а р а м е т р ы в не­ которые выходные данные, являющиеся решением за­ дачи. Поэтому при описанном в ы ш е подходе л ю б а я з а д а ч а может быть формализована в виде некоторай функции, а р г у м е н т а м и которой могут я в л я т ь с я т а к и е в е л и ч и ­ ны, к а к : количество параметров; значения параметров. Здесь и далее в качестве параметров будут рассмат­ риваться целые неотрицательные числа. К а к п р а в и л о , о д н и м из а р г у м е н т о в з а д а ч и я в л я е т с я к о л и ч е с т в о п а р а м е т р о в з а д а ч и . В том с л у ч а е , к о г д а по 2 176
з н а ч е н и ю этого п а р а м е т р а м о ж н о о п р е д е л и т ь к о н к р е т ­ ные з н а ч е н и я д р у г и х п а р а м е т р о в , мы эти п а р а м е т р ы будем опускать. Это обычно д е л а е т с я в случае, когда п а р а м е т р ы з а д а н ы т а б л и ц е й . Н а п р и м е р , е с л и н а м не­ о б х о д и м о н а й т и с у м м у п е р в ы х К э л е м е н т о в т а б л и ц ы , то д л я р е ш е н и я з а д а ч и д о с т а т о ч н о з н а т ь один п а р а м е т р К, а все о с т а л ь н ы е п а р а м е т р ы м о ж н о в ы б р а т ь из т а б ­ лицы. П о с л е того к а к з а д а ч а ф о р м а л и з о в а н а ( п р е д с т а в л е ­ на) в виде функции с некоторыми аргументами, опреде­ л и м п о н я т и е подзадачи. З д е с ь и д а л е е в этой г л а в е п о д п о д з а д а ч е й б у д е м п о н и м а т ь ту ж е з а д а ч у , но с м е н ь ш и м ч и с л о м п а р а м е т р о в или з а д а ч у с тем ж е числом п а р а ­ м е т р о в , но при этом хотя бы один из п а р а м е т р о в и м е е т меньшее значение. П р и м е р . Н а й т и с а м у ю т я ж е л у ю из 10 монет. Д л я формализации задачи определим функцию «Са­ м а я т я ж е л а я монета», а р г у м е н т а м и которой я в л я ю т с я к о л и ч е с т в о монет (10) и м а с с а к а ж д о й из монет. П о к а н а с не и н т е р е с у е т к о н к р е т н ы й в и д этой ф у н к ц и и , д л я н а с в а ж н е й ш и м ф а к т о р о м я в л я е т с я то, что она д а е т п р а ­ вильное решение. Д л я данной задачи можно рассмотреть 9 подзадач, которые имеют меньшее число аргументов: « с а м а я т я ж е л а я м о н е т а » из 1 м о н е т ы , « с а м а я т я ж е л а я м о н е т а » из 2 п е р в ы х монет, « с а м а я т я ж е л а я м о н е т а » из 3 п е р в ы х монет, « с а м а я т я ж е л а я м о н е т а » из 9 п е р в ы х монет. Таким образом, у нашей функции «Самая т я ж е л а я монета» аргументом является количество имеющихся монет, по к о т о р о м у м о ж н о о п р е д е л и т ь м а с с у к а ж д о й м о н е т ы . С л е д о в а т е л ь н о , р а с с м о т р е н н ы е п о д з а д а ч и име­ ют м е н ь ш е е к о л и ч е с т в о а р г у м е н т о в , чем и с х о д н а я з а ­ дача. Н а д о о т м е т и т ь , что под п о д з а д а ч е й не с л е д у е т пони177
мать некоторые этапы решения задачи, такие, как орга­ н и з а ц и я в в о д а и в ы в о д а д а н н ы х , их у п о р я д о ч е н и е или решение некоторой части поставленной з а д а ч и . ВОПРОСЫ ДЛЯ ПОВТОРЕНИЯ 1. ОПРЕДЕЛИТЬ ПАРАМЕТРЫ СЛЕДУЮЩИХ ЗАДАЧ: А) РЕШИТЬ ЛИНЕЙНОЕ УРАВНЕНИЕ ax-\-b = Q; Б ) НАЙТИ НАИМЕНЬШЕЕ ИЗ N ЧИСЕЛ а\, ai, AJV. 2 . ЧТО ТАКОЕ ПОДЗАДАЧА? 3 . ЧТО МОЖЕТ ЯВЛЯТЬСЯ АРГУМЕНТАМИ ФУНКЦИИ, ФОРМАЛИЗУЮЩЕЙ ЗАДАЧУ? § 2. С В Е Д Е Н И Е З А Д А Ч И К ПОДЗАДАЧАМ О д н и м из о с н о в н ы х с п о с о б о в р е ш е н и я з а д а ч я в л я е т с я их с в е д е н и е к р е ш е н и ю т а к о г о н а б о р а п о д з а д а ч , ч т о б ы , исходя и з р е ш е н и й п о д з а д а ч , б ы л о в о з м о ж н о п о л у ч и т ь р е ш е н и е исходной з а д а ч и . П р и э т о м д л я р е ш е н и я исходной з а д а ч и м о ж е т п о т р е ­ б о в а т ь с я р е ш е н и е одной или н е с к о л ь к и х п о д з а д а ч . Пример. Задачу, сформулированную в примере в предыдущем п а р а г р а ф е , можно свести к различным наборам подзадач, например: н а й т и с а м у ю т я ж е л у ю из 9 монет, а з а т е м найти с а м у ю т я ж е л у ю из 2 м о н е т ( н а й д е н н о й из 9 и о с т а в ш е й ­ с я ) или н а й т и с а м у ю т я ж е л у ю из 5 монет, з а т е м с а м у ю т я ж е л у ю из д р у г и х 5 монет, а з а т е м с а м у ю т я ж е л у ю из 2 монет, н а й д е н н ы х на п р е д ы д у щ и х ш а г а х . В о з м о ж н ы и д р у г и е н а б о р ы , но нетрудно,, з а м е т и т ь , что все они о с н о в ы в а ю т с я на одной п о д з а д а ч е : н а й т и с а м у ю т я ж е л у ю из 2 монет. В приведенном примере исходная з а д а ч а сводится к п о д з а д а ч а м с меньшим числом параметров, в данном с л у ч а е — с м е н ь ш и м к о л и ч е с т в о м монет. Используя этот ж е принцип, можно решить задачу нахождения Н О Д двух чисел, которая р а с с м а т р и в а л а с ь в п. 3 г л . 3. 178
Пример. Н а й т и Н О Д двух н а т у р а л ь н ы х чисел N и М. Е с л и ч и с л а р а в н ы , то их Н О Д р а в е н о д н о м у из ч и с е л , т. е. Н О Д ( Л Г , M) — N. Р а с с м о т р и м с л у ч а й , к о г д а ч и с л а не р а в н ы . И з в е ­ с т н о , что Н О Д ( N , А?) = Н О Д ( Л Г , M + N) = HOR(N + M, М). К р о м е того, при N>M Н О Д ( М , Л4) = Н О Д ( Л / - М , Af), а п р и M>N HOJX(N, M)=HOR{N, M-N). Последние соотношения и обеспечивают основной принцип сведения решения задачи к подзадачам: значе­ ние одного из п а р а м е т р о в с т а л о м е н ь ш е , хотя их к о л и ­ чество и осталось прежним. Таким образом, решение задачи нахождения Н О Д (N, М) п р и р а з л и ч н ы х з н а ч е н и я х N и Af с в о д и т с я к двум подзадачам: HOR(N — M, Af), е с л и N>M; Н О Д (N, M-N), е с л и Af > N. Вопросы для повторения Сформулируйте задачам. § 3. ПОНЯТИЕ основной принцип сведения РЕКУРРЕНТНОГО задачи к под­ СООТНОШЕНИЯ Н а й д е н н ы й с п о с о б с в е д е н и я р е ш е н и я исходной з а д а ­ чи к р е ш е н и ю н е к о т о р ы х п о д з а д а ч м о ж е т б ы т ь з а п и с а н в в и д е с о о т н о ш е н и й , в к о т о р ы х з н а ч е н и е ф у н к ц и и , со­ о т в е т с т в у ю щ е й исходной з а д а ч е , в ы р а ж а е т с я ч е р е з з н а ­ чения функций, соответствующих п о д з а д а ч а м . П р и этом в а ж н е й ш и м у с л о в и е м с в е д е н и я я в л я е т с я тот ф а к т , что з н а ч е н и я а р г у м е н т о в у л ю б о й из ф у н к ц и й в п р а в о й ч а с т и соотношения меньше значения аргументов функции в ле­ вой ч а с т и с о о т н о ш е н и я . Е с л и а р г у м е н т о в н е с к о л ь к о , то д о с т а т о ч н о у м е н ь ш е н и я о д н о г о из них. С л е д у е т о б р а т и т ь в н и м а н и е на то, что с о о т н о ш е н и я 179
д о л ж н ы б ы т ь о п р е д е л е н ы д л я всех д о п у с т и м ы х з н а ч е н и й аргументов. П р и м е р . Н а й т и с у м м у N э л е м е н т о в т а б л и ц ы А. П у с т ь ф у н к ц и я S (JV) с о о т в е т с т в у е т р е ш е н и ю исход­ ной з а д а ч и . Э т а ф у н к ц и я и м е е т один а р г у м е н т N — к о л и ч е с т в о с у м м и р у е м ы х э л е м е н т о в т а б л и ц ы А. П о н я т ­ но, что д л я п о и с к а с у м м ы N э л е м е н т о в д о с т а т о ч н о з н а т ь с у м м у п е р в ы х N— 1 э л е м е н т о в и з н а ч е н и е JV-ro э л е м е н т а . П о э т о м у р е ш е н и е исходной з а д а ч и м о ж н о з а п и с а т ь в ви­ де соотношения S(N) = S(N-l) + a. N С л е д у е т о т м е т и т ь , что это с о о т н о ш е н и е с п р а в е д л и в о д л я л ю б о г о к о л и ч е с т в а э л е м е н т о в N> I. Е г о м о ж н о переписать в виде S(i) = S ( i — + при i>i. О д н а к о п о к а это с о о т н о ш е н и е не о п р е д е л е н о п р и N=1. К приведенному в ы ш е соотношению необходимо д о б а в и т ь с о о т н о ш е н и е S(l) = a . З а м е т и м , что на п р а к т и к е п р и м е н я ю т с я и м е ю щ и е тот ж е смысл соотношения l S ( / ) = S ( j - l ) + a, п р и S ( 0 ) = 0. Последовательное применение первого соотношения при i = 1, 2, N и используется при вычислении суммы N элементов. S[0]:=0 н ц д л я i от 1 до N | S[i]:=S[i-l]+a[i] кц (4.1) В S[i] х р а н и т с я з н а ч е н и е ф у н к ц и и S ( / ) . Здесь и д а л е е в круглых скобках будут записываться аргументы функции, а в квадратных — индексы элемен­ тов м а с с и в а . П р и этом и м я ф у н к ц и и и и м я м а с с и в а , 180
в к о т о р о м х р а н и т с я з н а ч е н и е этой ф у н к ц и и , могут с о в п а ­ дать. П р и м е ч а н и е . Индекс у S может быть опущен, но смысл соотношения при этом остается прежним. Это связано с тем, что для вычисления следующего элемента таблицы S необходимо знать только предыдущий. П р и м е р . В ы ч и с л и т ь сумму S = 1 + 1 /х + 1 / х -{ . . . |-\-l/x п р и х, не р а в н о м 0. Как и в предыдущем примере, можно записать следу­ ющее соотношение: 2 N S ( 0 = S ( i — l ) + a(i), где а ( / ) = 1 / х ' , i>h S(0)=1. К о н е ч н о , м о ж н о и эти с о о т н о ш е н и я и с п о л ь з о в а т ь д л я написания программы. При этом у нас возникла новая з а д а ч а — н а й т и способ в ы ч и с л е н и я а (г), д л я чего м о ж ­ но в о с п о л ь з о в а т ь с я тем ж е п р и е м о м — п о п ы т а т ь с я в ы ­ ч и с л и т ь а (г) ч е р е з з н а ч е н и е а (г — 1). С о о т н о ш е н и е м е ж д у з н а ч е н и я м и a(i) и с (г — 1) имеет вид a (i) — a (i— 1)/х, а(0)=1. Поэтому поставленную задачу можно решить следую­ щим образом: S[0]: = 1 а[0]: = 1 н ц д л я i от 1 до N a [ i ] : = а [i — 1]/х S[i]:=S[i-l]+a[i] кц (4.2) П р и м е ч а н и е . Отметим, что и в этом случае индексы при Sua можно опустить в связи с тем, что для вычисления текущего элемента каждой из таблиц достаточно знать только значение предыду­ щего элемента. С о о т н о ш е н и я , с в я з ы в а ю щ и е одни и те ж е ф у н к ц и и , но с различными аргументами, называются рекуррентными соотношениями или рекуррентными уравнениями. 181
Вопросы для повторения ЯВЛЯЮТСЯ ЛИ РЕКУРРЕНТНЫМИ УРАВНЕНИЯМИ ОТНОШЕНИЯ, ГДЕ i — НАТУРАЛЬНОЕ А) D(I) = СЛЕДУЮЩИЕ СО­ ЧИСЛО: D(I-L)/ar, Б ) S(I)=S(I—L) + S(I+L) ДЛЯ I>2, S(L)=L; В) P(I) = P(I Р(1)=1, — 2)-I ДЛЯ / > 3 , Р ( 2 ) = 2; г) S ( i ) = S ( J D I V 2 ) + S ( « + L ) Д) S(0)=1; S ( i ) = S(i — S ( 0 ) = G; е) S ( 0 = S ( « - 1) + ( — 1 ДЛЯ T > 2 , 1 ) + 1 / I ДЛЯ Г > 1 , ДЛЯ Г > 1 , S(0)=I; Ж)/'(»)=/ '(<(ИУ2)+1 ; ДЛЯ I > 2 , F ( 1 ) = 0? § 4. П Р А В И Л Ь Н Ы Е РЕКУРРЕНТНЫЕ СООТНОШЕНИЯ Правильными рекуррентными соотношениями (урав­ нениями ) б у д е м н а з ы в а т ь т а к и е р е к у р р е н т н ы е с о о т н о ш е ­ н и я , у к о т о р ы х к о л и ч е с т в о или з н а ч е н и я а р г у м е н т о в у функций в правой части соотношения меньше количе­ ства или, соответственно, значений аргументов функции в левой части соотношения. Если аргументов несколько, то д о с т а т о ч н о у м е н ь ш е н и я о д н о г о из них. С л е д у е т о б р а т и т ь в н и м а н и е на то, что с о о т н о ш е н и я д о л ж н ы б ы т ь о п р е д е л е н ы д л я всех д о п у с т и м ы х з н а ч е н и й аргументов. Поэтому должны быть определены значения функций при начальных значениях параметров. В приведенных примерах соотношения- связывали функции только с двумя различными параметрами: S(i) и S (г — 1 ) , а т а к ж е а (г) и а (/-— 1 ) д л я л ю б о г о н а т у ­ р а л ь н о г о i. П р и э т о м б ы л и о п р е д е л е н ы н а ч а л ь н ы е з н а ч е ­ ния S ( 0 ) и с ( 0 ) . О т м е т и м , что б е з э т и х н а ч а л ь н ы х з н а ч е н и й р е к у р ­ рентное соотношение S(i) = S(i— 182 1) + а,-, г > 1 ,
б ы л о б ы н е п р а в и л ь н ы м , т а к к а к оно не о п р е д е л е н о п р и i= 1. К о н е ч н о , могут б ы т ь и б о л е е с л о ж н ы е с о о т н о ш е н и я , с в я з ы в а ю щ и е более двух функций. П р и м е р . О д н о й из н а и б о л е е и з в е с т н ы х ч и с л о в ы х последовательностей я в л я ю т с я числа Фибоначчи, кото­ рые определяются следующим рекуррентным соотноше­ нием: F(0)=1, F(l)=l F (i)= F (i — \ )-\-F(i t — 2) д л я н а т у р а л ь н о г о i> 1. В э т о м с л у ч а е д л я в ы ч и с л е н и я з н а ч е н и я F (N), к о т о ­ р о е х р а н и т с я в F [N], м о ж н о в о с п о л ь з о в а т ь с я с л е д у ю щ и м алгоритмом: F [()]: = F[l]: = нц для J F[i]: кц } l i от 2 до N =F[i-l] + F[i-2] (4.3) П р и м е ч а н и е . При этом в приведенном фрагменте уже нельзя просто опустить индексы, хотя в принципе можно вычислить значение F(N) без использования таблицы, но это уже вопрос способа реализа­ ции алгоритма. Пример такой реализации приводится ниже. а:=1 Ь: = 1 нц для i от 2 до N с: = Ь - ( - а а:=Ь Ь:=с кц (4.4) Здесь используется тот факт, что для вычисления текущего эле­ мента таблицы нам достаточно знать только значения двух преды­ дущих. 183
В О П Р О С Ы Д Л Я ПОВТОРЕНИЯ ЯВЛЯЮТСЯ ЛИ ПРАВИЛЬНЫМИ С Л Е Д У Ю Щ И Е Р Е К У Р Р Е Н Т Н Ы Е У Р А В ­ НЕНИЯ: А) S (i) — S (i—1) + а , / 2 , i — НАТУРАЛЬНОЕ; Б ) S ( T ) = S ( I — L ) ­ F ­ ( S (/—!))'' ДЛЯ />2, S(L)=L; В) P(i) = P(i— ДЛЯ I > 2 , P(L)=L; Г) S ( I ) = S (T DIV 2)-AI ДЛЯ S(0)=1; Д ) S(i) = S(i—l) S ( Q ) = 0, Е ) S(i) ДЛЯ Г> 2 , + S(i — 2)/i S(L)=L; i = S(i—l) ДЛЯ / " > 1, i + (—l) x /i S(0)=1; Ж) Z (/) = F {(£ DIV 2 ) 4 ­ 1 ) ­ [ 1 ДЛЯ Г > 2 , F ( 1 ) = 0? 7 § 5 . СПОСОБ ОРГАНИЗАЦИИ Из шим рассмотренных моментом сведения при задачи примеров решении видно, задачи к подзадачам. ТАБЛИЦ что важней­ является Н о не м е н е е способ важным в о п р о с о м я в л я е т с я и способ п о с т р о е н и я р е ш е н и я исход­ ной з а д а ч и из р е ш е н и й эффективных способов подзадач. Одним построения из наиболее решения исходной задачи является использование таблиц для запоминания решений подзадач. Такой метод решения задач е т с я методом динамического называ­ программирования. К а к у ж е говорилось раньше, подзадача может формализована одного или в виде нескольких функции, быть к о т о р а я "зависит аргументов. Если мы от возьмем т а б л и ц у , у которой количество элементов равно количе­ ству всех возможных ф у н к ц и и , то к а ж д о м у различных набору поставлен в соответствие элементы таблицы и р е ш е н и е исходной 184 аргументов элемент (решения задачи. наборов аргументов может таблицы. подзадач), быть Вычислив можно найти
5.1. Организация одномерных таблиц О д н и м из с п о с о б о в о р г а н и з а ц и и т а б л и ц я в л я е т с я такой, когда размерность т а б л и ц ы определяется количе­ ством аргументов у функции, соответствующей подза­ даче. П р и м е р . Рассмотрим задачу нахождения произве­ д е н и я 10 э л е м е н т о в т а б л и ц ы А. П у с т ь ф у н к ц и я Р (10) с о о т в е т с т в у е т р е ш е н и ю н а ш е й исходной з а д а ч и . В д а н н о м с л у ч а е у ф у н к ц и и т о л ь к о один п а р а м е т р — к о л и ч е с т в о э л е м е н т о в . Д л я п о и с к а п р о ­ и з в е д е н и я 10 э л е м е н т о в д о с т а т о ч н о з н а т ь п р о и з в е д е н и е п е р в ы х 9 э л е м е н т о в и з н а ч е н и е 10-го э л е м е н т а . П о э т о м у р е ш е н и е исходной з а д а ч и м о ж н о з а п и с а т ь в в и д е соотно­ ш е н и я Р ( 1 0 ) = Р ( 9 ) - а , . С л е д о в а т е л ь н о , это с о о т н о ш е н и е м о ж е т б ы т ь о п р е д е л е н о д л я л ю б о г о г, 2 < л < [ 1 0 : п P(i) = P(i—\).a t и Я ( 1 ) = а,. Н а п р а к т и к е д л я р а с с м а т р и в а с м о й з а д а ч и ч а щ е ис­ п о л ь з у е т с я р е к у р р е н т н о е с о о т н о ш е н и е , и м е ю щ е е тот ж е с м ы с л , но с д р у г и м н а ч а л ь н ы м з н а ч е н и е м : P(i)=P(i- при / > 1 , Р ( ( ) ) = 1. Приведем алгоритм, реализующий данное рекуррент­ ное с о о т н о ш е н и е : Р[0]: = 1 н ц д л я i от 1 д о N | P[i]:=P[i-l]*a[l] кц (4.5) Т а к к а к у н а ш е й ф у н к ц и и один а р г у м е н т — к о л и ­ ч е с т в о с о м н о ж и т е л е й , то д л я р е ш е н и я з а д а ч и д о с т а т о ч н о и с п о л ь з о в а т ь о д н о м е р н у ю т а б л и ц у . П р и этом к о л и ч е с т в о элементов таблицы определяется количеством различ­ ных значений аргумента. В приведенном примере р а з ­ м е р н о с т ь м а с с и в а р а в н а 10. Е с л и бы мы р е ш а л и з а д а ч у п о и с к а п р о и з в е д е н и я 20 э л е м е н т о в , то д л я р е а л и з а ц и и р е к у р р е н т н о г о с о о т н о ш е н и я н а м б ы л о бы д о с т а т о ч н о о д н о м е р н о й т а б л и ц ы с 20 э л е м е н т а м и . 185
Таким образом, размерность таблицы, достаточная д л я р е а л и з а ц и и рекуррентных соотношений, определя­ ется количеством аргументов у функций, соответствую­ щ и х п о д з а д а ч а м . К о л и ч е с т в о ж е э л е м е н т о в по к а ж д о й размерности (количество элементов в строках, столбцах) о п р е д е л я е т с я к о л и ч е с т в о м в о з м о ж н ы х з н а ч е н и й соответ­ ствующего аргумента. 5.2. О р г а н и з а ц и я д в у м е р н ы х таблиц Е щ е р а з о б р а т и м в н и м а н и е на то, что н а с п о к а не о ч е н ь и н т е р е с у е т р е а л и з а ц и я а л г о р и т м а , п р и которой м и н и м и з и р у е т с я т а к а я х а р а к т е р и с т и к а , к а к р а з м е р ис­ п о л ь з у е м о й о п е р а т и в н о й п а м я т и . Б у д е м с ч и т а т ь , что п а м я т и к о м п ь ю т е р а д о с т а т о ч н о д л я х р а н е н и я соответ­ ствующей таблицы. П р и м е р . Д л я данной прямоугольной таблицы А р а з м е р а 5 X 6 построить прямоугольную таблицу В того ж е р а з м е р а , э л е м е н т ы к о т о р о й о б л а д а ю т с л е д у ю ­ щ и м с в о й с т в о м : э л е м е н т В [i, / ] р а в е н м а к с и м а л ь н о м у из э л е м е н т о в т а б л и ц ы В, к о т о р ы е р а с п о л о ж е н ы л е в е е и в ы ­ ш е п о з и ц и и (/, / ) , в к л ю ч а я т а к ж е п о з и ц и ю (/, / ) . П р и э т о м с ч и т а е т с я , что п о з и ц и я ( 1 , 1) — в е р х н я я л е в а я пози­ ция прямоугольной таблицы, интересующая нас часть т а б л и ц ы в ы д е л е н а п р и i = 3 и / = 4. «12 «13 «14 «15 «16 «21 «22 «23 «24 «25 «26 «31 «32 «33 «34 «35 «36 «41 «42 «43 «44 «45 «46 «51 «52 «53 «54 «55 «56 П у с т ь T(i, / ) о б о з н а ч а е т ф у н к ц и ю , в ы ч и с л я ю щ у ю э л е м е н т В [i, /]. О п р е д е л и м с н а ч а л а з н а ч е н и я э л е м е н т о в т а б л и ц ы В, расположенных в первой строке и в первом столбце. Получим: Т(1, 186 1 ) = Л [ 1 , 1],
• 7 ( 1 , / ) = т а х { 7 ' ( 1 , / - 1 ) , A[l, T(i, 1) = т а х { Г ( « — 1 , 1), A[i, /]} п р и у > 2 , 1]} при г > 2 . Эти с о о т н о ш е н и я с л е д у ю т из того, что в этих с л у ч а я х интересующая нас область матрицы А ограничена толь­ ко э л е м е н т а м и первой строки или первого столбца мат­ рицы. П р и 2 < ! г s g ; 5 и 2 < ! / ^ 6 д л я этой функции можно записать следующее рекуррентное соотношение: T(i, у) = m a x {Г ( г - 1 , / ) , T(i, / - 1 ) , A [i, /]}. Д е й с т в и т е л ь н о , в е л и ч и н а Т (i—1, у) с о о т в е т с т в у е т м а к с и м а л ь н о й в е л и ч и н е э л е м е н т о в т а б л и ц ы А в той ее части, которая определяется значением индексов i— 1 и у, а в е л и ч и н а T(i, у — 1) — м а к с и м а л ь н о й в е л и ч и ­ не э л е м е н т о в т а б л и ц ы А, определяемой индексами i и у — 1. П о э т о м у э т и в е л и ч и н ы у ч и т ы в а ю т з н а ч е н и я всех э л е м е н т о в м а т р и ц ы А в той ее ч а с т и , к о т о р а я о п р е д е л я ­ ется значениями индексов i и у за исключением одного э л е м е н т а А [г, у]. Д л я р е а л и з а ц и и этих рекуррентных соотношений до­ статочно двумерной (прямоугольной) таблицы, так как у ф у н к ц и и Т д в а а р г у м е н т а . В а ж н о о т м е т и т ь , что п р и э т о м м ы м о ж е м о т о ж д е с т в и т ь в е л и ч и н ы Т (г, / ) и В [г, у]. Тогда фрагмент алгоритма можно записать следующим образом: В [ 1 , 1 ] : = А [ 1 , 1] н ц д л я j от 2 до б | B [ l , j] = m a x ( B [ l , j - 1 ] , A [ l , j]) кц н ц д л я i от 2 до 5 | B [ i , l ] = m a x ( B [ i - l , 1], A [ i , 1]) кц н ц д л я i от 2 до 5 н ц д л я j от 2 до 6 B [ i , j ] = m a x ( B [ i , j - 1 ] , В П - 1 , j]) B [ i , j] = m a x ( B [ i , j], A [ i , j]) кц кц (4.6) 187
Вопросы д л я пезуорания 1. Определить р а з м е р ы одномерных таблиц для следующих рекуррентных уравнений, где i — натуральное: а) S(i) = S(i—l) + S{i—l) S(l)=l; б) P(i) = P(i—l)-i для 2 < < < К), для 2 < i < 2 0 , Р(1)=1; в) S ( i ) = P ( « d i v 2 ) + l для 1 < г < 3 0 , S(0)=1; г) S ( 0 = S ( t — д л я S ( 0 ) = 0; l<i<100, д) S(») = S ( t — 1 ) + ( — l)'V/t д л я S(0)=1. 1</<1000, 2. Определить р а з м е р ы двумерных таблиц для следующих рекуррентных уравнений: а) S(i, / ) = min {S (г— 1, / ) , S (i, / — 1 ) , a ) для 2 ^ ( < 5, 2</<6, S ( l , /) = а , S(*, !) = a ; б) S ( i , / ) = m a x ( S ( i — i, / ) , S(i— 1 , / — ! ) ) + a, для 2 < i < 7 , 2</<13, S ( l , /') = a S (г, 1) = а,,; в) S ( i , j) = S(i— 1, /') + a + S(J, / — l ) для 2 < t < 10, 2</<6, S ( l , /) = а , S ( i , l ) = a ; r) S ( i , j) = S{i— 1, / ) — S ( i — 1, / - 1 ) + а, для l < / < 9 , l</<9, S ( 0 , / ) = (), S(i, 0 ) = 0, S ( 0 , 0) = (). tj 1у a 7 i / t <7 1у n 7 § 6. С П О С О Б В Ы Ч И С Л Е Н И Я ЭЛЕМЕНТОВ ТАБЛИЦЫ П о с л е того к а к н а й д е н о с в е д е н и е з а д а ч и к п о д з а д а ­ чам и определены рекуррентные соотношения, соответст­ вующие этому сведению, необходимо определить наибо­ л е е р а ц и о н а л ь н ы й способ в ы ч и с л е н и я э л е м е н т о в т а б ­ лицы. 6.1. Вычисление элементов одномерной таблицы Д л я о д н о м е р н о й т а б л и ц ы т а к и м способом о б ы ч н о является последовательное вычисление элементов, на­ чиная с первого. 188
П р и м е р . О п р е д е л и т ь , с к о л ь к и м и р а з л и ч н ы м и спо­ с о б а м и м о ж н о п о д н я т ь с я на 10-ю с т у п е н ь к у л е с т н и ц ы , е с л и з а один ш а г м о ж н о п о д н и м а т ь с я на с л е д у ю щ у ю с т у п е н ь к у и л и ч е р е з одну. П у с т ь /С (10) — з а д а ч а п о и с к а к о л и ч е с т в а с п о с о б о в п о д ъ е м а на 10-ю с т у п е н ь к у . О п р е д е л и м z'-ю п о д з а д а ч у нашей задачи к а к задачу поиска количества способов п о д ъ е м а на г'-ю с т у п е н ь к у . И с х о д я из у с л о в и я з а д а ч и , на 10-ю с т у п е н ь к у м о ж ­ но п о д н я т ь с я н е п о с р е д с т в е н н о с 8-й и 9-й. П о э т о м у , если мы знаем количество способов подъема К (8) и К ( 9 ) на 8-ю и 9-ю с т у п е н ь к и , то к о л и ч е с т в о с п о с о б о в п о д ъ е м а на 10-ю м о ж е т б ы т ь о п р е д е л е н о к а к /С (10) = = Л'(8) + Л'(9). Т а к о е с о о т н о ш е н и е п о л у ч а е т с я потому, что л ю б о й с п о с о б п о д ъ е м а на 8-ю с т у п е н ь к у п р е в р а щ а е т с я в с п о с о б п о д ъ е м а на 10-ю д о б а в л е н и е м п е р е ш а г и в а н и я ч е р е з 9-ю, а л ю б о й способ п о д ъ е м а на 9-ю с т у п е н ь к у п р е в р а щ а е т с я в с п о с о б п о д ъ е м а на 10-ю д о б а в л е н и е м п о д ъ е м а с 9-й на 10-ю. В с е эти с п о с о б ы р а з л и ч н ы . Аналогичное соотношение справедливо для любой с т у п е н ь к и i, н а ч и н а я с т р е т ь е й : K(i) = K(i-2) + K(i~l). О с т а л о с ь о п р е д е л и т ь з н а ч е н и я Л' (1) и К (2), к о т о р ы е р а в н ы : / С ( 1 ) = 1 , К (2) = 2. Следовательно, д л я решения з а д а ч и достаточно одно­ м е р н о й т а б л и ц ы с 10 э л е м е н т а м и , д л я к о т о р о й н е о б х о д и ­ мо п о с л е д о в а т е л ь н о в ы ч и с л и т ь з н а ч е н и я э л е м е н т о в т а б ­ л и ц ы с о г л а с н о п р и в е д е н н ы м в ы ш е р е к у р р е н т н ы м соотно­ шениям. К[1]: = 1 К[2]:=2 н ц д л я i от 3 до 10 | K[i]:=K[i-l] + K[i-2] кц (4.7) 189
П р и м е ч а н и е. Полученные рекуррентные соотношения не отли­ чаются от рекуррентных соотношений примера 6, поэтому могут быть реализованы без использования таблицы. 6.2. В ы ч и с л е н и е э л е м е н т о в д в у м е р н о й таблицы П р и м е р . В таблице с N строками и М столбцами, с о с т о я щ е й из 0 и 1, н е о б х о д и м о н а й т и к в а д р а т н ы й б л о к м а к с и м а л ь н о г о р а з м е р а , с о с т о я щ и й из одних е д и н и ц . П о д б л о к о м п о н и м а е т с я м н о ж е с т в о э л е м е н т о в соседних (подряд идущих) строк и столбцов таблицы. Интересую­ щ а я нас часть таблицы выделена. 1 0 1 1 1 1 1 1 1 1 i 0 1 1 0 1 1 1 0 1 1 1 1 1 I 0 1 1 I ! Положение любого квадратного блока может быть о п р е д е л е н о его р а з м е р о м и п о л о ж е н и е м о д н о г о из его углов. П у с т ь Т(i, у) — ф у н к ц и я , з н а ч е н и е к о т о р о й с о о т в е т с т ­ вует р а з м е р у м а к с и м а л ь н о г о к в а д р а т н о г о блока, состоя­ щ е г о из о д н и х е д и н и ц , п р а в ы й н и ж н и й у г о л к о т о р о г о р а с п о л о ж е н в п о з и ц и и (г, / ) . Ф у н к ц и я Г (г, / ) в ы ч и с л я е т э л е м е н т т а б л и ц ы В [г, / ] . Д л я п р и в е д е н н о й в ы ш е т а б л и ц ы з н а ч е н и я Т(г, /') б у д у т и м е т ь вид: со 1 2 4 5 1 2 3 4 5 6 1 0 1 1 1 1 1 1 2 0 1 2 2 0 1 1 2 3 1 1 1 0 1 2 0 1 1 1 2 1 v Таким образом, наша задача свелась к вычислению максимального значения функции Т при всевозможных з н а ч е н и я х п а р а м е т р о в i и у. Этой ф у н к ц и и м о ж е т б ы т ь поставлена в соответствие т а б л и ц а р а з м е р а N-M. О п р е д е л и м с н а ч а л а з н а ч е н и е э л е м е н т о в т а б л и ц ы В, 190
р а с п о л о ж е н н ы х в первой с т р о к е и в п е р в о м с т о л б ц е . Получим: / 3 ( 1 , 1) = Л [ 1 , 1], 13(1, ]) = Л [ 1 , у] п р и / > 2 , B(i, 1) = Л [/, 1] п р и / > 2 . Д а н н ы е с о о т н о ш е н и я с л е д у ю т из того, что в э т и х случаях рассматриваемая область матрицы Л содержит т о л ь к о один э л е м е н т м а т р и ц ы . П р и 2^.1^.N и 2 ^ / ^ М д л я этой ф у н к ц и и м о ж н о записать следующие рекуррентные соотношения: В [>', у'] = 0, е с л и Л [/, / ] = 0 и В [j, / ] = m i n {В [i- 1, у], В [f, у - 1], В [ i - 1 , у - 1 ] } + 1, е с л и Л [/, / ] = 1. П е р в о е с о о т н о ш е н и е п о к а з ы в а е т , что р а з м е р м а к с и ­ мального единичного блока с п р а в ы м нижним углом в п о з и ц и и (г, у) р а в е н н у л ю в с л у ч а е Л [/, у] = 0. Убедимся в правильности второго соотношения. Дей­ с т в и т е л ь н о , в е л и ч и н а B[i—1, у] с о о т в е т с т в у е т м а к с и ­ мальному р а з м е р у единичного блока т а б л и ц ы А с пра­ в ы м н и ж н и м у г л о м в п о з и ц и и (i—1, у). Т о г д а р а з м е р единичного блока с п р а в ы м нижним углом в позиции (i, у) не п р е в ы ш а е т величину В [г— 1, y]-f 1, т а к к а к к блоку в позиции ( г — 1 , у) могла д о б а в и т ь с я только одна с т р о к а . В е л и ч и н а В [г, / — 1 ] с о о т в е т с т в у е т м а к с и м а л ь н о м у р а з м е р у единичного блока т а б л и ц ы Л с п р а в ы м нижним у г л о м в п о з и ц и и (/, у'-— 1). Т о г д а р а з м е р е д и н и ч н о г о б л о к а с п р а в ы м н и ж н и м у г л о м в п о з и ц и и (/, у") не п р е в ы ­ ш а е т в е л и ч и н у В [», у " — 1 ] - | - 1 , т а к к а к к б л о к у в п о з и ц и и (i—1, у) мог д о б а в и т ь с я т о л ь к о один с т о л б е ц . В е л и ч и н а В [г— 1, у — 1] с о о т в е т с т в у е т м а к с и м а л ь н о м у р а з м е р у единичного блока т а б л и ц ы Л с п р а в ы м нижним у г л о м в п о з и ц и и (i—1, у — 1). Т о г д а р а з м е р е д и н и ч н о г о б л о к а с п р а в ы м н и ж н и м у г л о м в п о з и ц и и (г, у) не п р е в ы ­ ш а е т в е л и ч и н у В [г— 1, у— 1 ]-f-1, т а к к а к к б л о к у в п о з и ­ ции (/ — 1, у"—1) м о г л и д о б а в и т ь с я т о л ь к о о д н а с т р о к а и один столбец. 191
И т а к , р а з м е р единичного блока у г л о м в п о з и ц и и (i, /') р а в е н m\n{B[i с правым нижним — 1, у], В |/, у — 1], В | 1 , 1 ] : = А [ 1 , 1] н ц д л я j от 2 до 6 | B [ l , j ] : = A [ l , j] кц н ц д л я i от 2 до 5 | B [ i , l ] : = A [ i , 1] кц н ц д л я i от 2 до 5 н ц д л я j от 2 до 6 если A[i, j ] : = 1 то B [ i , j ] : = m i n ( B l i , j - l L B [ i - 1 , j]) B[i, j ] : = m i n ( B [ i , j], B [ i - 1 , j - l ] ) + l иначе B[i, j ] : = 0 все кц кц (4.8) 6.3. В ы ч и с л е н и е э л е м е н т о в д в у м е р н о й т а б л и ц ы с дополнительными ограничениями П р и м е р . На складе имеется 5 неделимых предме­ тов. Д л я к а ж д о г о п р е д м е т а и з в е с т н а его с т о и м о с т ь (в- р у б л я х ) и м а с с а (в к и л о г р а м м а х ) . В е л и ч и н ы с т о и м о с т и и массы являются натуральными числами. Н а ш а цель с о с т о и т в том, чтобы о п р е д е л и т ь м а к с и м а л ь н у ю с у м м а р ­ ную с т о и м о с т ь п р е д м е т о в , к о т о р ы е м о ж н о унести со с к л а д а п р и у с л о в и и , что с у м м а р н а я м а с с а п р е д м е т о в не д о л ж н а п р е в ы ш а т ь 16 кг. П у с т ь э л е м е н т С,- т а б л и ц ы С с о о т в е т с т в у е т стоимости г'-го п р е д м е т а , а э л е м е н т Л1,- т а б л и ц ы М — м а с с е г'-го п р е д м е т а . Б у д е м с ч и т а т ь , что п р е д м е т ы п р о н у м е р о в а н ы в п о р я д к е их с л е д о в а н и я в т а б л и ц а х . 192
П у с т ь Т о б о з н а ч а е т ф у н к ц и ю , з н а ч е н и е которой со­ ответствует решению нашей задачи. Аргументами у э т о й ф у н к ц и и я в л я е т с я к о л и ч е с т в о п р е д м е т о в (по э т о м у - а р г у м е н т у м о ж н о о п р е д е л и т ь их с т о и м о с т и и м а с с ы соответствующих предметов), а т а к ж е максимальная с у м м а р н а я масса, которую можно унести. Д л я н а ш е й з а д а ч и Г ( 5 , 16) о п р е д е л и м п о д з а д а ч и Т(i, / ) , где i о б о з н а ч а е т к о л и ч е с т в о н а ч а л ь н ы х п р е д м е ­ т о в , из к о т о р ы х м о ж н о о с у щ е с т в л я т ь в ы б о р , а / о п р е д е ­ л я е т м а к с и м а л ь н о возможную с у м м а р н у ю массу уноси­ м ы х п р е д м е т о в . О т м е т и м , что в в е д е н н ы й т а к и м о б р а з о м первый п а р а м е т р i определяет как количество предметов д л я п о д з а д а ч и , т а к и з н а ч е н и я их с т о и м о с т е й и м а с с из т а б л и ц С и М. О п р е д е л и м с н а ч а л а н а ч а л ь н ы е з н а ч е н и я ф у н к ц и и Т. П р и н у л е в ы х з н а ч е н и я х одного из а р г у м е н т о в з н а ч е н и е функции равно нулю: 7 ( 0 , 0) = 0, Т(0, / ) = 0 п р и / > 1 , T(i, 0) = 0 при / > 1 . О п р е д е л и м в о з м о ж н ы е з н а ч е н и я ф у н к ц и и /' («, /') при ненулевых значениях аргументов. Р е ш е н и е п о д з а д а ч и , соответствующей функции Т (i, /), может быть сведено к двум возможностям: уносится ли п р и н а и л у ч ш е м р е ш е н и и п р е д м е т с н о м е р о м i или нет. Е с л и п р е д м е т не у н о с и т с я , то р е ш е н и е задачи с i предметами сводится к решению подзадачи с ( — 1 п р е д м е т а м и , т. е. T(i, /)=Г(/-1, /). Е с л и п р е д м е т с н о м е р о м / у н о с и т с я , то это у м е н ь ­ шает максимально возможную суммарную массу для i—1 п е р в ы х п р е д м е т о в на в е л и ч и н у M[i], о д н о в р е м е н н о при этом у в е л и ч и в а я з н а ч е н и е р е ш е н и я д л я о с т а в ш и х с я п р е д м е т о в T(i— 1, j — M[i]) на в е л и ч и н у C[i], т. е. ГЦ, 7 Информатика, 8—9 кл. j)=T(i-l, j-M\i\) + C[i\. 193
П р и э т о м н е о б х о д и м о у ч и т ы в а т ь , что в т о р а я с и т у а ц и я в о з м о ж н а т о л ь к о т о г д а , к о г д а м а с с а г-го п р е д м е т а не больше значения /. Т е п е р ь д л я п о л у ч е н и я н а и л у ч ш е г о р е ш е н и я н а м не­ о б х о д и м о в ы б р а т ь л у ч ш у ю из э т и х д в у х в о з м о ж н о с т е й . П о э т о м у р е к у р р е н т н о е с о о т н о ш е н и е при и / ^ 1 и м е е т вид: T(i, / ) = 7 - ( i - l , /) при j<M[i], T(i, j)=max(T(i-l, j), T(i-l, j-M[i\)+C[i\ при j"^M[i]. П у с т ь з а д а н ы следующие з н а ч е н и я стоимости и мас­ сы д л я 5 п р е д м е т о в : С[1] = С [2] = С[3] = С [4] = С [5] = 5, 7, 4, 9, 8, М [1] = Af[2] = Af[3] = Af [4] = Af [5] = 4; 5; 3; 7; 6. Т а б л и ц а з н а ч е н и й ф у н к ц и и Т, к о т о р у ю м ы ж е н а з о в е м Т, в ы г л я д и т с л е д у ю щ и м о б р а з о м : так 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 5 5 5 5 5 5 5 5 5 5 5 5 5 2 0 0 0 0 5 7 7 7 7 12 12 12 12 1-2 12 12 12 3 0 0 0 4 5 7 7 9 11 12 12 12 16 16 16 16 16 4 0 0 0 4 5 7 7 9 11 12 13 14 16 16 18 20 21 5 0 0 0 4 5 7 8 9 11 12 13 15 16 17 19 20 21 С л е д о в а т е л ь н о , р е ш е н и е з а д а ч и 7 ( 5 , 16) = 2 1 , т. е. м о ж н о у н е с т и п р е д м е т о в на 21 р у б л ь . П р и в е д е м одну из в о з м о ж н ы х р е а л и з а ц и й . 194
Т[0, 0]: = 0 н ц д л я j от 1 до 16 | Т [ 0 , j] = 0 кц н ц д л я i от 1 до 5 | T [ i , 0] = 0 кц н ц д л я i от 1 до 5 нц д л я j от 1 до 16 е с л и j > = М [i] то T [ i , j] = m a x ( T [ i — 1 , иначе T [ i , j] = T [ i - l , j] все кц кц (4.9) j], T [ i - 1 , j_M[i]]+C[i]) ЗАДАЧИ ДЛЯ ПОВТОРЕНИЯ 1. К к а к и м п о д з а д а ч а м м о ж е т с в о д и т ь с я п о и с к о д н о й ф а л ь ш и в о й м о н е т ы с р е д и 27 монет, е с л и и з в е с т н о , что о н а л е г ч е д р у г и х , а все о с т а л ь н ы е и м е ю т о д и н а к о в у ю массу? 2. К к а к и м п о д з а д а ч а м м о ж е т с в о д и т ь с я з а д а ч а в ы ­ ч и с л е н и я з н а ч е н и я JV! (N\ = 1 ' 2 - 3 - . . . '/V)? 3 . К к а к и м п о д з а д а ч а м м о ж е т с в о д и т ь с я з а д а ч а по­ иска суммы положительных элементов таблицы, состоя­ щ е й из 10 э л е м е н т о в ? 4. Я в л я ю т с я ли п р а в и л ь н ы м и рекуррентные у р а в н е ­ н и я , где i — н а т у р а л ь н о е ч и с л о : а ) S(i) = S(i—l) — ai, б) S(i) = S(i-l) + S(i — 1) д л я i > 2 , S(l)=l; в) P(i) = P{i—\)i для i > 2 , Я(1)=1; г) S ( t ) = S (i div 2 ) + 1 д л я i > 2 , S(0)=1; 195
д ) S(i) = S(i—\)+[/i для i>l, = S ( i - l ) + ( — l) x /i для S ( 0 ) = 0; е) S(i) i i S(0)=1; ж) F(i) = F ( ( i d i v 2 ) + l ) + l F ( 1 ) = 0, F ( l ) = для i>2, -1? 5. У к а з а т ь , п р и к а к и х р а з м е р а х т а б л и ц м о г у т реализованы рекуррентные а ) S(i)=S(i6iw2) быть соотношения: + S{i — 1) д л я 2<г<20, S(l)=l; б ) S ( i , / ) = m i n ( S ( t — 1 , / ) , S(i— 2<i<iV, 1, / — 1 ) , а,,) для 2</<Af, S ( l , / ) = а , S ( i , 1) = а „ ? 17 6. П у с т ь У , = 1,5; W j = - i t i - Получить у , где л — з а д а н н о е н а т у р а л ь н о е 0 x , У 3 , Я число. дг = с, x — d\ x — х _i + х , _ + 6. 7. П у с т ь v 2 t Получить 2 { х . х , . . . , х„, где га, Ь, с, d — з а д а н н ы е н а т у р а л ь н ы е ч и с л а . 2 3 8. П у с т ь н, = 0, « 2 = 1 ; « i = M j _ i + . « i _ 2 i - i ; - 2 - По­ лучить.и , и , «„, где га — з а д а н н о е н а т у р а л ь н о е ч и с л о . - u 3 м — 4 9. П у с т ь я = а, = 1; а , = ^ _ , + « , - 2 а Получить а , 1 0 а , 2 3 а, где л — з а д а н н о е н а т у р а л ь н о е 10. П у с т ь а, = 6, = 1, а, = 0,5 (д/&,_i + 0,5д/я,_ i ) , 6 = п число. ; = 2«, _, + й<_ . П о л у ч и т ь а , а , а, 2 1 2 га — н а т у р а л ь н о е 3 b, Ь, п 2 где 3 число. 11. П у с т ь а, = и, bi — v, a — 2b _ -\-a _ i + П о л у ч и т ь а , а-„ число, l i а, Ь, Ь, 2 ральное i п & и, 2 6 = 2of_ -f- u i 1 Ь , г д е га — н а т у ­ 3 п v — некоторые действительные числа. 12. Пусть « 1 = 1 , b = l, a = 3/4a,_ t i = 4/Зй,-_ —a,-_,. П о л у ч и т ь а , а , 1 га — н а т у р а л ь н о е 2 — 1 а„, b , Ь , 3 2 3 & , = Ь , где п число. 13. П у с т ь a, = 1, &, = 1, а = 2'а,_ ! + !'!&,_!, ^ = / ! а , _ , + г + 3'й,_,. П о л у ч и т ь а , а 2 р а л ь н о е число. 196 3 , я „ , 6 , Ь ,/>„, 2 3 г д е га — н а т у ­
14. В ы ч и с л и т ь з н а ч е н и е д р о б е й . а) б) 1 + 2 + 3 + п + 3" + ' п+\ я+1 в) г) 1 + 1 + —1 —1 п-\- (-1)" га+1 п+1 л+ 2 е) Д) 12 2 + 12 12 12 + 16 4 + Т_ Я+1 12 + я+ 2 ж) 2 + 24 -24 (-1)"я! п+ 1 197
ЗАДАЧИ ПОВЫШЕННОЙ СЛОЖНОСТИ 1. С о с т а в и т ь а л г о р и т м о п р е д е л е н и я к о л и ч е с т в а ш е с ­ тизначных «счастливых» т р а м в а й н ы х билетов, у которых сумма первых трех цифр совпадает с суммой трех по­ следних. 2. С о с т а в и т ь алгоритм определения количества 2Л^-значных « с ч а с т л и в ы х » б и л е т о в , у к о т о р ы х с у м м а п е р в ы х N ц и ф р р а в н а с у м м е п о с л е д н и х N ц и ф р ; Af—• произвольное натуральное число. 3. Н а й т и к о л и ч е с т в о га-значных чисел в д е с я т и ч н о й системе счисления, у к а ж д о г о из которых сумма цифр р а в н а k. П р и э т о м в к а ч е с т в е n - з н а ч н о г о ч и с л а м ы допускаем и числа, н а ч и н а ю щ и е с я с одного или несколь­ ких н у л е й . Н а п р и м е р , 000102 р а с с м а т р и в а е т с я к а к ш е с ­ тизначное число, сумма цифр которого р а в н а 3. 4 . Ф и ш к а м о ж е т д в и г а т ь с я по п о л ю д л и н о й N т о л ь к о в п е р е д . Д л и н а х о д а ф и ш к и не б о л е е К- Н а й т и ч и с л о р а з л и ч н ы х п у т е й , по к о т о р ы м ф и ш к а м о ж е т п р о й т и п о л е от п о з и ц и и 1 д о п о з и ц и и N. П р и м е р . N = 4, К = 2. В о з м о ж н ы е д л и н ы ходов: 1, 1. 1 1, 2 2, 1 О т в е т : 3. 5 . П о к у п а т е л ь имеет купюры достоинством А , А, а продавец — В В . Найти максимальную стоимость т о в а р а Р, к о т о р ы й п о к у п а т е л ь н е м о ж е т к у п и т ь , п о т о м у что нет в о з м о ж н о с т и точно р а с с ч и т а т ь с я з а э т о т т о в а р с п р о д а в ц о м , хотя д е н е г н а п о к у п к у е г о д о с т а т о ч н о . 6. У п о к у п а т е л я е с т ь п м о н е т д о с т о и н с т в о м / / , , Н . У п р о д а в ц а е с т ь т монет д о с т о и н с т в о м В В . Может ли покупатель приобрести вещь стоимостью S т а к , чтобы у п р о д а в ц а н а ш л а с ь т о ч н а я с д а ч а ( е с л и о н а необхо­ дима)? 7. П о м а т р и ц е A [I..N, 1..N] п о с т р о и т ь матрицу B[l..N, 1..JV]. Э л е м е н т B[i, / ] р а в е н м а к с и м а л ь н о м у из э л е м е н т о в м а т р и ц ы А, п р и н а д л е ж а щ е м у ч а с т и , о г р а н и х и п т п ь 198 т
ценной с п р а в а д и а г о н а л я м и , п р о х о д я щ и м и ч е р е з A [i, /] (см. таблицу). * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * • 8. З а д а н а м а т р и ц а н а т у р а л ь н ы х чисел А[1..п, 1..т]. З а к а ж д ы й п р о х о д ч е р е з к л е т к у (£, / ) в з и м а е т с я ш т р а ф A [i, /]. Н е о б х о д и м о м и н и м и з и р о в а т ь ш т р а ф и: а ) п р о й т и из к а к о й ­ л и б о к л е т к и 1­й с т р о к и в п-ю с т р о к у , п р и э т о м из т е к у щ е й к л е т к и м о ж н о п е р е й ­ ти в л ю б у ю из 3 соседних, с т о я щ и х в с т р о к е с но­ м е р о м , на 1 б о л ь ш и м ; б ) р е а л и з о в а т ь п у н к т а ) д л я п е р е х о д а из к л е т к и ( 1 , 1) в к л е т к у (п, т). 9. В ы п у к л ы й Л'­угольник, N^3, задается координата­ м и своих в е р ш и н в п о р я д к е о б х о д а по к о н т у р у . Р а з б и т ь е г о н а т р е у г о л ь н и к и (N — 3) д и а г о н а л я м и , не п е р е с е к а ю ­ щ и м и с я , к р о м е к а к по к о н ц а м , т а к и м о б р а з о м , ч т о б ы : а ) с у м м а их д л и н б ы л а м и н и м а л ь н о й ; б ) с а м а я д л и н н а я из д и а г о н а л е й и м е л а н а и м е н ь ш у ю длину. 10. П у с т ь х = ( а „ а , а ) и y = (b , b Ь ) — две з а д а н н ы е строки символов. О б о з н а ч и м ч е р е з d(x, у) м и н и м а л ь н о е к о л и ч е с т в о вставок, удалений и замен символов, которое необходимо д л я п р е о б р а з о в а н и я х в у. Н а п р и м е р : d (ptslddf, lsgldds) = 3 2 i i J ptslddf J t УД а л е н и е P . , , , tslddf т { { вставка g y. tsglddf 2 п замена / Д л я з а д а н н ы х с т р о к x и у о п р е д е л и т ь d(x, ^ tsgldds у). 199
11. Д а н ы д в е с т р о к и х и у. С т р о к а х с о с т о и т из н у л е й и е д и н и ц , с т р о к а у с о с т о и т из с и м в о л о в А и В. М о ж н о л и с т р о к у х п р е о б р а з о в а т ь в с т р о к у у по с л е д у ю щ е м у правилу: цифра 0 преобразуется в непустую последова­ тельность букв Л, а ц и ф р а 1 — л и б о в непустую последо­ вательность букв Л, либо в непустую последовательность букв В? 12. П у с т ь и з в е с т н о , что д л я п е р е м н о ж е н и я м а т р и ц ы р а з м е р а пХт на м а т р и ц у р а з м е р а m X / г т р е б у е т с я n-m-k операций, и в результате получается матрица размера яХ&Необходимо определить, какое минимальное число операций потребуется для перемножения s матриц А и A , з а д а н н ы х с в о и м и р а з м е р а м и n(i)-m(i). s П р и этом можно перемножать любые две рядом стоящие матрицы. Замечание: п (г) — ч и с л о с т р о к в м а т р и ц е А ь т (г) — ч и с л о с т о л б ц о в в м а т р и ц е Л , ; п (i) = m ( / + 1 ) . 13. а ) И з заданной числовой последовательности Л [1..JV] в ы ч е р к н у т ь м и н и м а л ь н о е к о л и ч е с т в о элементов так, чтобы оставшиеся о б р а з о в а л и строго в о з р а с т а ю щ у ю п о с л е д о в а т е л ь н о с т ь ( и л и , что то ж е , н а й т и ную по д л и н е с т р о г о в о з р а с т а ю щ у ю максималь­ подпоследователь­ ность п о с л е д о в а т е л ь н о с т и Л ) . б) И з з а д а н н о й ч и с л о в о й п о с л е д о в а т е л ь н о с т и Л [I..N] вычеркнуть минимальное число элементов таким обра­ зом, чтобы в оставшейся подпоследовательности к а ж д ы й последующий элемент был больше предыдущего, кроме, быть может, одной пары «разрыва» возрастающей соседних элементов (одного подпоследовательности). Н а п р и м е р : Л = ( 1 , 2, 3, 2, 4, 3, 4, 6); И с к о м а я п о д п о с л е д о в а т е л ь н о с т ь ( 1 , 2, 3 , 2, 3, 4, 6). Разрыв 200 подчеркнут.
в) И з з а д а н н о й ч и с л о в о й п о с л е д о в а т е л ь н о с т и A[l..N] вычеркнуть минимальное число элементов так, чтобы в оставшейся подпоследовательности каждый последую­ щий элемент был больше предыдущего, кроме, быть может, т п а р соседних элементов ( с ф о р м и р о в а т ь возра­ стающую подпоследовательность с т «разрывами»). 14. И з э л е м е н т о в з а д а н н о й п о с л е д о в а т е л ь н о с т и ц е ­ л ы х чисел п о с т р о и т ь т а к у ю м а к с и м а л ь н о д л и н н у ю п о д ­ п о с л е д о в а т е л ь н о с т ь ч и с е л , чтобы к а ж д ы й п о с л е д у ю щ и й э л е м е н т п о д п о с л е д о в а т е л ь н о с т и д е л и л с я н а ц е л о на п р е ­ дыдущий. 15. З а д а ю т с я ч и с л о п> 1 — р а з м е р н о с т ь п р о с т р а н с т ­ ва и р а з м е р ы М « - м е р н ы х п а р а л л е л е п и п е д о в (а , a ), i—l, т. П а р а л л е л е п и п е д м о ж е т располагаться в п р о с т р а н с т в е л ю б ы м из с п о с о б о в , при к о т о р ы х его р е б р а п а р а л л е л ь н ы осям координат. а in Найти максимальную последовательность вкладывае­ мых друг в друга п а р а л л е л е п и п е д о в . 16. З а д а н ы т р и ч и с л а а, Ь, с. М о ж н о л и п р е д с т а в и т ь число а таким образом, чтобы a = x[l]-x[2]-...-x[k]= П х [i]. где b х [i\ ^ с, х [i], a, b, с — ц е л ы е ? Л у ч ш и м с ч и т а е т с я алгоритм, находящий такое представление с наимень­ шим числом множителей. Предусмотреть вариант, когда т а к о г о п р е д с т а в л е н и я не с у щ е с т в у е т . 17. С х е м а ж е л е з н о д о р о ж н о й с о р т и р о в о ч н о й с т а н ц и и п р и в е д е н а на р и с у н к е 29. m путей Рис. 29 201
П у т и п р о н у м е р о в а н ы от 1 до га. Н а вход в п р о и з в о л ь н о м п о р я д к е п о д а е т с я п в а г о н о в , з а н у м е р о в а н н ы х ч и с л а м и от 1 д о п. К а ж д ы й в а г о н н е о б х о д и м о н а п р а в и т ь на один из с т а н ц и о н н ы х путей, о т к у д а е г о з а т е м п е р е в о д я т на в ы х о д . Н а л ю б о й путь можно направить произвольное количество вагонов. На выходе необходимо сформировать состав с номерами вагонов в возрастающем порядке. О п и с а т ь а л г о р и т м , к о т о р ы й по д а н н ы м п, т и исход­ ной п о с л е д о в а т е л ь н о с т и н о м е р о в в а г о н о в о т в е ч а е т на вопрос, можно ли выполнить требуемую сортировку. 18. В о з в е с т и ч и с л о А в н а т у р а л ь н у ю с т е п е н ь п з а к а к можно меньшее количество умножений. 19. З а д а н ы д в е п о с л е д о в а т е л ь н о с т и чисел z и у. М о ж н о ли получить последовательность z вычеркивани­ ем э л е м е н т о в из у? 2 0 . В в о д я т с я д в е п о с л е д о в а т е л ь н о с т и х и у. Н а й т и м а к с и м а л ь н у ю по д л и н е п о с л е д о в а т е л ь н о с т ь г, к о т о р у ю м о ж н о п о л у ч и т ь в ы ч е р к и в а н и е м э л е м е н т о в к а к из х, т а к и из у. Н а п р и м е р , д л я x = «abacs», y — «dalas» последова­ т е л ь н о с т ь z = «aas». 21. Пусть х и у — две бинарных последовательности (т. е. э л е м е н т ы п о с л е д о в а т е л ь н о с т е й — н у л и и е д и н и ц ы ) ; х и у можно р а с с м а т р и в а т ь как з а п и с ь в двоичной форме некоторых двух натуральных чисел. Н а й т и м а к с и м а л ь н о е ч и с л о z, д в о и ч н у ю з а п и с ь кото­ р о г о м о ж н о п о л у ч и т ь в ы ч е р к и в а н и е м ц и ф р к а к из х, т а к и из у. О т в е т в ы д а т ь в в и д е б и н а р н о й п о с л е д о в а т е л ь ­ ности. ЗАДАЧИ ДЛЯ САМОСТОЯТЕЛЬНОГО РЕШЕНИЯ 1. С у щ е с т в у е т и г р а д л я одного и г р о к а , к о т о р а я н а ч и ­ нается с з а д а н и я цепочки с N вершинами. Пример г р а ф и ч е с к о г о п р е д с т а в л е н и я ц е п о ч к и п о к а з а н на р и с у н ­ ке 30, а, где N = 4. Д л я к а ж д о й в е р ш и н ы ц е п о ч к и з а д а ­ ется значение — целое число, а д л я к а ж д о г о ребра — 202
2 + a 5 3 з в Рис. 30 метка операции -{-(сложение) либо * (умножение). Р е б р а ц е п о ч к и п р о н у м е р о в а н ы от 1 до J V — 1 . К а ж д ы й ход состоит из с л е д у ю щ и х ш а г о в : выбирается ребро Е и две вершины V и V , которые с о е д и н е н ы р е б р о м Е; р е б р о Е и в е р ш и н ы V и V з а м е н я ю т с я новой в е р ш и ­ ной со з н а ч е н и е м , р а в н ы м р е з у л ь т а т у в ы п о л н е н и я о п е р а ­ ции, о п р е д е л е н н о й м е т к о й р е б р а Е, н а д з н а ч е н и я м и вершин V и V . И г р а з а к а н ч и в а е т с я , к о г д а б о л ь ш е нет ни о д н о г о р е б р а . Р е з у л ь т а т и г р ы — это ч и с л о , р а в н о е з н а ч е н и ю оставшейся вершины. Пример игры. Игрок начал игру с удаления р е б р а 2 ( р и с . 30, б), з а т е м — р е б р а 3 ( р и с . 3 0 , в), н а к о ­ нец, р е б р а 7. Р е з у л ь т а т о м и г р ы б у д е т ч и с л о 0 ( р и с . 30, г). Н а п и с а т ь п р о г р а м м у , к о т о р а я по з а д а н н о й ц е п о ч к е вычисляет максимальное значение оставшейся вершины и в ы в о д и т с п и с о к всех тех р е б е р , у д а л е н и е к о т о р ы х н а п е р в о м х о д е и г р ы п о з в о л я е т п о л у ч и т ь это з н а ч е н и е . Входные данные находятся в файле с именем C H A I N . I N и имеют следующую структуру. В п е р в о й с т р о к е н а х о д и т с я число N (N ^.100) — к о л и ­ чество вершин цепочки. x } x 2 2 2 203
В к а ж д о й из п о с л е д у ю щ и х N с т р о к а х н а х о д я т с я значения в вершинах — целые числа. В к а ж д о й из п о с л е д у ю щ и х N—1 строк находится тип о п е р а ц и й ( + или *) д л я с о о т в е т с т в у ю щ е г о р е б р а . Ребро с номером / соединяет вершины с номерами / и В выходной ф а й л с именем C H A I N . O U T требуется вывести максимально возможный результат. 2. В с в я з и с э п и д е м и е й г р и п п а в б о л ь н и ц у н а п р а в л я ­ е т с я А б о л ь н ы х г р и п п о м «А» и В б о л ь н ы х г р и п п о м « В » . Б о л ь н ы х г р и п п о м «А» н е л ь з я п о м е щ а т ь в о д н у п а л а т у с б о л ь н ы м и г р и п п о м « В » . И м е е т с я и н ф о р м а ц и я об об­ щем количестве п а л а т Р в больнице, пронумерованных от 1 до Р, и о р а с п р е д е л е н и и у ж е и м е ю щ и х с я т а м больных. Написать программу, определяющую максимальное к о л и ч е с т в о б о л ь н ы х М, к о т о р о е б о л ь н и ц а в с о с т о я ­ нии п р и н я т ь . П р и р а з м е щ е н и и н о в ы х б о л ь н ы х не р а з р е ­ ш а е т с я п е р е с е л я т ь у ж е и м е ю щ и х с я б о л ь н ы х из п а л а т ы в палату. В х о д н ы е д а н н ы е н а х о д я т с я в т е к с т о в о м ф а й л е и име­ ют с л е д у ю щ у ю с т р у к т у р у : в первой строке находится число А (целое, 0 < : А ^ <100); во второй с т р о к е — ч и с л о В ( ц е л о е , O ^ f i ^ l O O ) ; в третьей строке — число Р (натуральное, Р^.20); в к а ж д о й из п о с л е д у ю щ и х Р с т р о к н а х о д я т с я 3 ч и с л а га, а, Ь, р а з д е л е н н ы х п р о б е л о м , где га — в м е с т и м о с т ь п а л а т ы , а — количество у ж е имеющихся в п а л а т е боль­ н ы х г р и п п о м «А», b — к о л и ч е с т в о у ж е и м е ю щ и х с я в п а ­ л а т е больных гриппом «В». И н ф о р м а ц и я о вместимости палат вводится последовательно для палат с номерами 1, 2, Р. Ч и с л а га, a, b — ц е л ы е н е о т р и ц а т е л ь н ы е м е н ь ш е 100. Выходные д а н н ы е д о л ж н ы быть з а п и с а н ы в тексто­ вый ф а й л и иметь следующий ф о р м а т : в п е р в о й с т р о к е д о л ж н о н а х о д и т ь с я ч и с л о М; если все п о с т у п и в ш и е б о л ь н ы е р а з м е щ е н ы , то во 204
второй строке д о л ж н ы находиться номера палат, разде­ ленные пробелом, куда помещаются больные грип­ пом «А». 3. З а д а е т с я н а т у р а л ь н о е ч и с л о N ( А / ^ 9 9 9 ) . Д в о е и г р а ю щ и х н а з ы в а ю т по о ч е р е д и ч и с л а , м е н ь ш е 1000, по с л е д у ю щ и м п р а в и л а м . Н а ч и н а я с ч и с л а N, к а ж д о е новое ч и с л о д о л ж н о у в е л и ч и в а т ь одну из ц и ф р п р е д ы д у щ е г о ч и с л а ( в о з м о ж н о , н е з н а ч а щ и й н у л ь ) на 1, 2 или 3. П р о ­ и г р а в ш и м с ч и т а е т с я тот, кто н а з ы в а е т ч и с л о 9 9 9 . Д л я заданного N необходимо определить, может ли в ы и г р а т ь и г р о к , д е л а ю щ и й п е р в ы й ход, при н а и л у ч ш и х последующих ходах противника. Вывести сообщение « П е р в ы й в ы и г р ы в а е т » или « П е р в ы й п р о и г р ы в а е т » . В случае возможности выигрыша первым игроком требу­ е т с я н а п е ч а т а т ь все его в о з м о ж н ы е п е р в ы е х о д ы . 4. З а д а н ч и с л о в о й т р е у г о л ь н и к из N с т р о к . Н а п и с а т ь программу, которая определяет максимальную сумму ч и с е л , р а с п о л о ж е н н ы х на пути, к о т о р ы й н а ч и н а е т с я с в е р х н е г о ч и с л а и з а к а н ч и в а е т с я на к а к о м - н и б у д ь ч и с л е в основании треугольника (максимум суммы — среди всех т а к и х п у т е й ) . 7 3 8 2 4 8 1 7 5 0 7 2 4 6 5 Н а к а ж д о м ш а г е м о ж н о д в и г а т ь с я к с о с е д н е м у по д и а г о н а л и ч и с л у в л е в о - в н и з или в п р а в о - в н и з . Ч и с л о строк в треугольнике больше 1 и меньше либо равно 100. Все ч и с л а в т р е у г о л ь н и к е — ц е л ы е в и н т е р в а л е м е ж д у 0 и 99 в к л ю ч и т е л ь н о . 5. В м а г а з и н е к а ж д ы й т о в а р и м е е т цену. Н а п р и м е р , ц е н а одного ц в е т к а р а в н а 2, а ц е н а одной в а з ы р а в н а 5. Ч т о б ы п р и в л е ч ь п о к у п а т е л е й , м а г а з и н в в е л с к и д к и : р е ш и л п р о д а в а т ь н а б о р о д и н а к о в ы х или р а з н ы х т о в а р о в 205
по п о н и ж е н н о й ц е н е . Н а п р и м е р : т р и ц в е т к а з а 5 в м е с т о б или д в е в а з ы в м е с т е с о д н и м ц в е т к о м з а 10 в м е с т о 12. Н а п и с а т ь п р о г р а м м у , в ы ч и с л я ю щ у ю н а и м е н ь ш у ю це­ ну, к о т о р у ю п о к у п а т е л ь д о л ж е н з а п л а т и т ь з а з а д а н н ы е покупки. Оптимальное решение д о л ж н о быть получено посредством скидок. Н а б о р товаров, который требуется к у п и т ь , н е л ь з я д о п о л н я т ь ничем, д а ж е е с л и б ы это снизило общую стоимость набора. Д л я описанных выше цен и с к и д о к н а и м е н ь ш а я цена з а т р и ц в е т к а и д в е в а з ы р а в н а 14: д в е в а з ы и один ц в е т о к п р о д а ю т с я по сни­ ж е н н о й ц е н е з а 10 и д в а ц в е т к а — по о б ы ч н о й ц е н е з а 4. Входные данные содержатся в двух файлах: INPUT.TXT и OFFER.TXT. Первый файл описывает покупки («корзину с покупками»), второй — скидки. В обоих ф а й л а х с о д е р ж а т с я только целые числа. П е р в а я строка ф а й л а I N P U T . T X T содержит коли­ чество b р а з л и ч н ы х в и д о в т о в а р а в к о р з и н е (О^.Ь^.5). К а ж д а я из с л е д у ю щ и х b с т р о к с о д е р ж и т з н а ч е н и я k и р. З н а ч е н и е с — у н и к а л ь н ы й к о д т о в а р а (1 ^ с ^ 9 9 9 ) . Значение р задает, сколько единиц товара находится в к о р з и н е (1 < ; £ ^ 5 ) . О б р а т и т е в н и м а н и е , что о б щ е е к о л и ч е с т в о т о в а р о в в к о р з и н е м о ж е т б ы т ь не б о л е е 5­5 = 25 (единиц). П е р в а я строка ф а й л а O F F E R . T X T с о д е р ж и т коли­ чество s в о з м о ж н ы х с к и д о к ( 0 ^ s ^ 9 9 ) . К а ж д а я из с л е д у ю щ и х s с т р о к о п и с ы в а е т одну с к и д к у , о п р е д е л я я набор товаров и общую стоимость набора. Первое число п в такой строке определяет количество р а з л и ч н ы х видов т о в а р а в н а б о р е ( 1 ^ « ^ 5 ) . С л е д у ю щ и е п л а р чисел (с, k) у к а з ы в а ю т , что k е д и н и ц т о в а р а с кодом с в к л ю ч е н ы в н а б о р д л я с к и д к и (1 ^ / г ^ 5 , 1 ^ x ^ 9 9 9 ) . П о с л е д н е е число в строке р определяет уменьшенную стоимость набора ( 1 ^ р ^ 9 9 9 9 ) . Стоимость набора меньше сум­ марной стоимости отдельных единиц товаров в наборе. З а п и с а т ь в выходной ф а й л O U T P U T . T X T одну строку с н а и м е н ь ш е й в о з м о ж н о й с у м м а р н о й с т о и м о с т ь ю поку­ пок, з а д а н н ы х во входном ф а й л е . 206
6. В ф а й л о в о й с и с т е м е н а с т е н н о г о п е р с о н а л ь н о г о компьютера ВС-1 (Висячая Система) ф а й л ы организова­ н ы в к а т а л о г и . В к о м п ь ю т е р е нет п о н я т и я у с т р о й с т в а и поэтому полное имя ф а й л а является строкой, состоя­ щ е й из и м е н к а т а л о г о в и и м е н и ф а й л а , р а з д е л е н н ы х с и м в о л о м \ , п р и ч е м \ не м о ж е т б ы т ь п е р в ы м , п о с л е д н и м с и м в о л о м , а т а к ж е идти д в а р а з а п о д р я д . И м я файла (каталога) может быть произвольной д л и н ы , но д л и н а п о л н о г о и м е н и ф а й л а не м о ж е т б ы т ь длиннее N символов. В качестве символов, допустимых к употреблению в именах файлов (каталогов), могут и с п о л ь з о в а т ь с я с и м в о л ы из а л ф а в и т а , с о с т о я щ е г о из К б у к в ( с и м в о л \ не входит в их ч и с л о ) . Д л я данных / \ ( 1 < / ( < 1 3 ) и N ( l < i V < 5 0 ) опреде­ лить максимальное число файлов, которое можно запи­ с а т ь на д а н н ы й к о м п ь ю т е р . 7. Во в р е м я т р а н с л я ц и и к о н ц е р т а « П е с н я г о д а » п р е д ­ п р и н и м а т е л ь К р е ш и л с д е л а т ь б и з н е с на п р о и з в о д с т в е кассет. Он имеет М кассет с длительностью звучания D к а ж д а я и хочет з а п и с а т ь на них м а к с и м а л ь н о е ч и с л о п е с е н . Эти песни (их о б щ е е к о л и ч е с т в о N) п е р е д а ю т с я в п о р я д к е 1, 2, N и имеют з а р а н е е известные ему д л и т е л ь н о с т и з в у ч а н и я L(l), L (2), L(N). Предприни­ м а т е л ь м о ж е т в ы п о л н и т ь одно из с л е д у ю щ и х д е й с т в и й : з а п и с а т ь о ч е р е д н у ю п е с н ю на к а с с е т у ( е с л и она т у д а п о м е щ а е т с я ) и л и п р о п у с т и т ь ее; е с л и п е с н я на к а с с е т у не п о м е щ а е т с я , то м о ж е т п р о п у с т и т ь э т у песню или н а ч а т ь з а п и с ы в а т ь ее на н о в у ю к а с с е т у , при этом с т а р у ю к а с с е т у о т л о ж и т ь и т у д а у ж е ничего не з а п и с ы в а т ь . О п р е д е л и т ь м а к с и м а л ь н о е к о л и ч е с т в о песен, к о т о р ы е п р е д п р и н и м а т е л ь м о ж е т з а п и с а т ь на к а с с е т ы . 8. У ч и т е л ь и н ф о р м а т и к и ж и в е т на N-м э т а ж е д е в я т и ­ этажного дома с лифтом, который может останавливать­ с я на к а ж д о м э т а ж е . М е ж д у с о с е д н и м и э т а ж а м и д о м а и м е е т с я л е с т н и ц а из д в у х п р о л е т о в , р а з д е л е н н ы х п л о ­ щ а д к о й , по k с т у п е н е к в к а ж д о м п р о л е т е . С к о л ь к и м и 207
с п о с о б а м и у ч и т е л ь м о ж е т п о д н я т ь с я на свой э т а ж , е с л и , п о д н и м а я с ь по л е с т н и ц е , м о ж н о с т а н о в и т ь с я на с л е д у ю ­ щ у ю с т у п е н ь к у или идти ч е р е з одну с т у п е н ь к у ? 9. С р е д и всех Л/-битных д в о и ч н ы х чисел у к а з а т ь ко­ л и ч е с т в о тех, у к о т о р ы х в д в о и ч н о й з а п и с и нет п о д р я д и д у щ и х k е д и н и ц . С а м и ч и с л а в ы д а в а т ь не н а д о ! N и k — н а т у р а л ь н ы е , k^N ^.30. 10. В с в я з и с о т к р ы т и е м о л и м п и а д ы по и н ф о р м а т и к е N ч е л о в е к (JVsJ 10) р е ш и л и у с т р о и т ь в е ч е р и н к у . Д л я п р о ­ в е д е н и я в е ч е р и н к и д о с т а т о ч н о к у п и т ь MF б у т ы л о к ф а н ­ т ы , MB б а н а н о в и МС т о р т о в . Т р е б у е т с я о п р е д е л и т ь минимальный взнос участника вечеринки. При покупке определенных наборов товара действу­ ют п р а в и л а оптовой т о р г о в л и : с т о и м о с т ь н а б о р а т о в а р а м о ж е т о т л и ч а т ь с я от с у м м а р н о й с т о и м о с т и о т д е л ь н ы х частей. Н а п и с а т ь п р о г р а м м у , к о т о р а я по в х о д н ы м д а н н ы м определяет минимальный взнос участника вечеринки. УКАЗАНИЯ К Р Е Ш Е Н И Ю ЗАДАЧ СЛОЖНОСТИ ПОВЫШЕННОЙ 1. Вариант 1. С а м о е п р о с т о е — это п е р е б р а т ь все в о з м о ж н ы е к о м б и н а ц и и шести ц и ф р и п о д с ч и т а т ь число «счастливых» билетов. Count: = 0 ; (количество «счастливых» билетов} for a l : = 0 to 9 do for a 2 : = 0 to 9 do for a 3 : = 0 to 9 do for a 4 : = 0 to 9 do for a 5 : = 0 to 9 d o for a 6 : = 0 to 9 do if a l + a 2 + a 3 = a 4 + a 5 + a 6 («счастливый»?} t h e n C o u n t : = C o u n t - j - 1; Под сложностью алгоритма будем понимать коли­ чество в ы п о л н е н и й о п е р а т о р о в н а и б о л е е г л у б о к о в л о 208
ж е н н о г о ц и к л а . У с л о в и е if во в л о ж е н н ы х ц и к л а х б у д е т п р о в е р я т ь с я 1 0 р а з , п о э т о м у б у д е м г о в о р и т ь , что с л о ж ­ н о с т ь этого а л г о р и т м а 10 . Вариант 2. О б р а т и м в н и м а н и е на то, что в « с ч а с т л и ­ вом» билете последняя цифра а однозначно определя­ ется первыми пятью: 6 6 6 Яе = («1 + «г + а ) — ( а + а ) . 3 4 5 Е с л и 0 ^ а ^ 9 , то б и л е т « с ч а с т л и в ы й » , и н а ч е — нет. Т а к и м о б р а з о м , мы м о ж е м у б р а т ь шестой в л о ж е н н ы й цикл: 6 Count: = 0 ; for a l : = 0 to 9 do for a 2 : = 0 to 9 do for a 3 : = 0 to 9 do for a 4 : = 0 to 9 do for a 5 : = 0 to 9 do begin a 6 : = ( a l + a2 + a 3 ) — ( a 4 + a5); if ( a 6 > = 0 ) a n d ( a 6 < = 9 ) t h e n C o u n t : = C o u n t + 1; end; С л о ж н о с т ь а л г о р и т м а 10 . И с п о л ь з у я з а в и с и м о с т ь a от п е р в ы х п я т и ц и ф р , мы у м е н ь ш и л и с л о ж н о с т ь а л г о ­ р и т м а и, в о о б щ е г о в о р я , в р е м я в ы п о л н е н и я п р о г р а м м ы в 10 р а з ! Вариант 3 . Е с л и к о м б и н а ц и й а а а первых трех цифр с с у м м о й Т=а -\-а -{-а н а с ч и т ы в а е т с я С [Г], то всего « с ч а с т л и в ы х » б и л е т о в с с у м м о й п о л о в и н ы 7 = a, + a + + а = а + а + а будет C[Tf. Действительно, каждое «счастливое» шестиразрядное число может быть получено «склейкой» двух произволь­ н ы х т р е х р а з р я д н ы х чисел с о д и н а к о в о й с у м м о й ц и ф р . В с е г о с у щ е с т в у е т 28 в с е в о з м о ж н ы х з н а ч е н и й с у м м Т — от 0 = 0 + 0 + 0 до 27 = 9 + 9 + 9. П о д с ч и т а е м С [/], / = 5 6 х 1 2 2 3 3 , 2 3 4 5 6 209
= 0, 27, з а т е м н а х о д и м и н т е р е с у ю щ е е н а с к о л и ч е с т в о « с ч а с т л и в ы х » б и л е т о в : С[Of+C[if+ ... + С[27] . З а м е т и м , что « с ч а с т л и в ы х » б и л е т о в с с у м м о й Т с т о л ь ­ ко ж е , с к о л ь к о и с с у м м о й 2 7 — Т . Д е й с т в и т е л ь н о , е с л и билет аа а а а а с с у м м о й Т—«счастливый», то т а к о ­ в ы м ж е я в л я е т с я и б и л е т ( 9 9 9 9 9 9 — a a a a a a^) с суммой 2 7 — Т . П о э т о м у ч и с л о б и л е т о в м о ж н о в ы ч и с л я т ь и по ф о р м у л е 2 ( С | 0 ] + . . . + С [ 1 3 ] ) , т. е. р а с с м а т р и в а т ь т о л ь ­ ко с у м м ы от 0 д о 13. 2 { 2 3 4 5 6 x 2 2 3 4 b 2 v a r С : a r r a y [ 0 . . 1 3 ] of l o n g i n t ; { м а с с и в С из 14 э л е м е н т о в — п о ч и с л у р а с с м а т р и в а е м ы х сумм} Count: = 0 ; for Т : = 0 t o 13 do C [ T ] : = 0 ; for a l : = 0 to 9 do for a 2 : = 0 t o 9 do for a 3 : = 0 to 9 do begin T : = a l - f - a 2 + a3; if T < = 13 { п е р е б и р а е м все} { в о з м о ж н ы е a l a 2 a3} {если с у м м а не п р е ­ в ы ш а е т 13, то} then С [Т]: = С [ Т ] + 1 {нашли еще один билет} end; {с с у м м о й Т} for Т : = 0 t o 13 do {считаем число би­ летов} C o u n t : = C o u n t + С [Т]* С [Т]; " C o u n t : = C o u n t * 2; {удваиваем сумму} Сложность этого алгоритма р а в н а 10 . Вариант 4. В в а р и а н т е 3 м ы п е р е б и р а л и к о м б и н а ц и ю ц и ф р и и с к а л и к о л и ч е с т в о к о м б и н а ц и й с с у м м а м и С [71. С е й ч а с м ы п о й д е м от с у м м ы Т, и по ней б у д е м о п р е д е ­ лять, какое количество комбинаций а а а е е имеет. Итак, Т=а -\-а -\-а . 3 1 { 210 2 3 2 3
М и н и м а л ь н о е значение, которое может п р и н и м а т ь а — это m a x {О, Т—18}. Ч л е н Т—18 п о я в л я е т с я из с л е д у ю щ и х с о о б р а ж е н и й : п у с т ь а = а = 9, т о г д а a = = Т—18, но а не м о ж е т б ы т ь м е н ь ш е 0. М а к с и м а л ь н о е з н а ч е н и е а = т'т{9, Т} ( т а к к а к а и а н е о т р и ц а т е л ь н ы , т о а, ^ Т и о д н о в р е м е н н о а, ^ 9 ) . и 2 3 t х { 2 3 Д л я ц и ф р ы а а н а л о г и ч н о п о л у ч а е м , что о н а л е ж и т в п р е д е л а х от m a x { 0 , Т — а — 9} до m i n {9, Т—а }. Ц и ф р а а по Т, а и а о п р е д е л я е т с я о д н о з н а ч н о . П о л у ч а е м , что к о м б и н а ц и й а , а а с с у м м о й Г и с п е р ­ вой ц и ф р о й Й! с т о л ь к о ж е , с к о л ь к о в о з м о ж н ы х ц и ф р а , а именно 2 { ъ г { 2 2 3 2 m i n {9, Т — а,} — m a x {0, Т—а, — 9}+1. К а к и в в а р и а н т е 3, м ы м о ж е м р а с с м а т р и в а т ь д и а п а ­ з о н с у м м от 0 до 13. Count: = 0 ; for Т : = 0 to 13 do begin CT:=0; for a l : = m a x ( 0 , T — 1 8 ) to m i n (9, T) do CT: = C T + min(9, T — al) — max(0, T —al — -9)+l; C o u n t : = C o u n t + C T * CT end; C o u n t : — C o u n t * 2; С л о ж н о с т ь этого а л г о р и т м а (т. е. к о л и ч е с т в о в ы п о л ­ нений операций присваивания внутри двух вложенных циклов) есть 9 . 2. З а д а ч а имеет очевидное решение, которое состоит в г е н е р а ц и и всех 2ЛГ-разрядных ч и с е л и п р о в е р к е их на требуемое свойство. Однако общее количество таких чисел р а в н о 1 0 и п о э т о м у п р и i V > 3 п о т р е б у е т с я о ч е н ь м н о г о в р е м е н и д л я п о л у ч е н и я р е з у л ь т а т а д а ж е на м о щ ­ ном к о м п ь ю т е р е . С л е д о в а т е л ь н о , н е о б х о д и м о р а з р а б о ­ т а т ь а л г о р и т м , к о т о р ы й не т р е б у е т г е н е р а ц и и всех ч и с е л . 5 2W 211
О б о з н а ч и м ч е р е з S (k, i) к о л и ч е с т в о ^ ­ р а з р я д н ы х ч и с е л , с у м м а ц и ф р к о т о р ы х р а в н а i. Н а п р и м е р , 5 (2, 3) = = 4, т а к к а к с у щ е с т в у е т 4 д в у р а з р я д н ы х ч и с л а ( 0 3 , 12, 2 1 , 30), с у м м а ц и ф р к о т о р ы х р а в н а 3 . Л е г к о з а м е т и т ь , что 5 ( 1 , 0 = 1 п р и / < К) и S ( 1 , i) = Q п р и г > 9 . П р е д п о ­ л о ж и м т е п е р ь , что м ы с у м е л и в ы ч и с л и т ь з н а ч е н и я в е л и ­ чин S (N, i) д л я всех i от 0 д о 9JV, т. е. мы з н а е м , с к о л ь к о с у щ е с т в у е т Л / ­ р а з р я д н ы х чисел с с у м м о й ц и ф р , р а в н о й 0, 1, 9JV (9iV — м а к с и м а л ь н а я с у м м а ц и ф р в Л/­раз­ р я д н о м ч и с л е ) . Т о г д а н е т р у д н о у б е д и т ь с я , что о б щ е е к о л и ч е с т в о « с ч а с т л и в ы х » 2 М ­ р а з р я д н ы х чисел р а в н о P = S(N, 0f + S(N, lf + ...+S{N, 9Nf. Д е й с т в и т е л ь н о , п р и р е ш е н и и з а д а ч и 1 ( в а р и а н т 3) б ы ­ л о п о к а з а н о , что к а ж д о е « с ч а с т л и в о е » 2 Я ­ р а з р я д н о е число может быть получено «склейкой» двух произволь­ ных ЛЛ­разрядных ч и с е л с о д и н а к о в о й с у м м о й ц и ф р . Таким образом, необходимо уметь вычислять значе­ н и я в е л и ч и н S(k, i) д л я всех k^.N, i^9k. Определим с п о с о б в ы ч и с л е н и я S ( & + 1 , i) ч е р е з з н а ч е н и я в е л и ч и н S (k, / ) , П о н я т н о , что л ю б о е ( £ + 1 ) ­ р а з р я д н о с ч и с л о м о ж е т б ы т ь п о л у ч е н о из ^ ­ р а з р я д н о г о д о б а в л е н и ­ ем е щ е одного р а з р я д а ( ц и ф р ы ) . С л е д о в а т е л ь н о , S(k+l, i) = S(k, i - l ) + S(k, i ­ 2 ) + ..., где 1 , 2 , . . . — в о з м о ж н ы е д о б а в л е н н ы е ц и ф р ы . Я с н о , что это 0, 1, т, где m = m i n ( 9 , i). С л е д о в а т е л ь н о , S(k+l, i) = S(k, i — 0) + S(k, i ­ l ) + . . . +S(k, i — m). 3. И с п о л ь з у е м м е т о д р е ш е н и я з а д а ч и 2. О б о з н а ч и м и с к о м о е к о л и ч е с т в о га­значных чисел в д е ­ с я т и ч н о й с и с т е м е с ч и с л е н и я , у к а ж д о г о из к о т о р ы х с у м ­ ма ц и ф р р а в н а k, ч е р е з С (k, п). П о с л е д н я я ц и ф р а ч и с л а м о ж е т л е ж а т ь в п р о м е ж у т к е от 0 д о 9. В с о о т в е т с т в и и с этим сумма цифр («—1)­значного числа, получающая­ ся из га­значного ч и с л а о т б р а с ы в а н и е м п о с л е д н е й ц и ф р ы , 212
м о ж е т п р и н и м а т ь одно из з н а ч е н и й к, к—1, О т с ю д а п о л у ч а е м , что С(к, п) = С(к, К р о м е того, С(k, п - \ ) + ...+С(к-9, k — 9. п—\). 1) = 1 при 0 < & < ! 9 и С(k, 1) = 0 при 4. Очевидное решение з а д а ч и п р е д п о л а г а е т р а з л о ж е ­ ние ч и с л а N—1 на в с е в о з м о ж н ы е с у м м ы т а к и м о б р а з о м , ч т о б ы к а ж д о е с л а г а е м о е из с у м м ы не п р е в о с х о д и л о КО ч е в и д н о , что т а к и х р а з л о ж е н и й о ч е н ь много, о с о б е н н о е с л и у ч и т ы в а т ь , что п о р я д о к с л а г а е м ы х в р а з л о ж е н и и с у щ е с т в е н е н , т а к к а к он с о о т в е т с т в у е т р а з л и ч н о й п о с л е ­ д о в а т е л ь н о с т и ходов ф и ш к и . Н о о б р а т и м в н и м а н и е на то, что в у с л о в и и з а д а ч и не т р е б у е т с я в ы п и с а т ь все эти р а з л о ж е н и я , н е о б х о д и м о т о л ь к о у к а з а т ь их о б щ е е к о л и ­ чество! О б о з н а ч и м ч е р е з S (/) к о л и ч е с т в о р а з л и ч н ы х путей, по к о т о р ы м ф и ш к а м о ж е т п р о й т и п о л е от н а ч а л а д о п о з и ц и и с н о м е р о м /. П р е д п о л о ж и м т е п е р ь , что д л я л ю б о г о ( от 1 до i и з в е с т н ы з н а ч е н и я в е л и ч и н S (/). З а д а ч а состоит в определении п р а в и л а вычисления зна­ чения S ( / + l ) , используя значения известных величин. Л е г к о з а м е т и т ь , что в п о з и ц и ю с н о м е р о м г + 1 ф и ш к а м о ж е т п о п а с т ь т о л ь к о из п о з и ц и и i, i—1, . . . . i — s, где s = m i n (К, i— 1) ( м ы р а с с м а т р и в а е м т о л ь к о п о з и ц и и с но­ м е р а м и от 1 до N). С л е д о в а т е л ь н о , S(i+l) = S(i) + S(i-l) + ...+S{i-K). Таким образом, полагая S ( l ) = l и вычисляя после­ довательно значения величин 5 ( 2 ) , S (N) по опи­ с а н н о м у в ы ш е п р а в и л у , п о л у ч а е м з н а ч е н и е S (N), кото­ р о е и у к а з ы в а е т о б щ е е к о л и ч е с т в о р а з л и ч н ы х п у т е й , по к о т о р ы м ф и ш к а м о ж е т п р о й т и п о л е от н а ч а л а до пози­ ц и и с н о м е р о м N. 5. Е с л и п о к у п а т е л ь о т д а с т все свои к у п ю р ы п р о д а в ­ цу, то п о н я т н о , что д л я р е ш е н и я исходной з а д а ч и необхо213
димо найти р а з м е р минимальной сдачи, которую прода­ в е ц не м о ж е т в е р н у т ь , и с п о л ь з у я л ю б ы е и м е ю щ и е с я т е п е р ь у него к у п ю р ы C ( е г о и п о к у п а т е л я ) . Д л я этого у д о б н о о т с о р т и р о в а т ь к у п ю р ы по их д о с т о и н с т в у в по­ рядке неубывания. t П р е д п о л о ж и м , что п р о д а в е ц м о ж е т в е р н у т ь л ю б у ю с д а ч у от 1 до S , и с п о л ь з у я т о л ь к о п е р в ы е i к у п ю р . Д л я следующей ( г + 1 ) - й купюры достоинства С , возможны 2 ситуации. + 1 1) C <.S-\-2. Т о г д а п о н я т н о , что п р о д а в е ц м о ж е т в е р н у т ь л ю б у ю с д а ч у от 1 до С / - - 1 + 5 , т а к к а к л ю б а я из э т и х с у м м п р е д с т а в и м а л и б о п е р в ы м и i к у п ю р а м и , л и б о (г + 1 )-й к у п ю р о й в м е с т е с н е к о т о р ы м и из п е р в ы х i купюр. i+l т 2) С , > S + 1 . В этом с л у ч а е п р о д а в е ц не в е р н у т ь с д а ч у S + 1. О п и ш е м а л г о р и т м в ы ч и с л е н и я S. + 1 может S:=0; i : = l; нц пока ( i < = N ) S : = S + C[ij; i: = i + l кц и ( C [ i ] < = = S + l) Е с л и з н а ч е н и е S не м е н ь ш е с у м м а р н о г о к о л и ч е с т в а д е н е г п о к у п а т е л я , то п о к у п а т е л ь м о ж е т к у п и т ь т о в а р л ю б о й д о с т у п н о й ему с т о и м о с т и , т о ч н о р а с с ч и т а в ш и с ь з а п о к у п к у . И н а ч е — P==A -\-... -\-A _ . 6. Е с л и S>Я,-}-... + # „ , то с у м м у в ы п л а т и т ь н е л ь з я . Е с л и п о к у п а т е л ь о т д а с т в с е свои к у п ю р ы п р о д а в ц у , то п о н я т н о , что д л я р е ш е н и я исходной з а д а ч и н а д о определить, может ли продавец вернуть сумму # ! + ... + -\-Н -\-В -\~... -\-В — S, и с п о л ь з у я л ю б ы е и м е ю щ и е с я т е ­ п е р ь у него к у п ю р ы М (его и п о к у п а т е л я ) . Д л я э т о г о у д о б н о о т с о р т и р о в а т ь к у п ю р ы по их д о с т о и н с т в у в по­ рядке неубывания. l п 1 т { 214 N s
П у с т ь P = M -j-M -{-... +М . Р е ш и м более общую з а д а ч у : н а й д е м все н е п р е д с т а в и м ы е д а н н ы м и к у п ю р а м и с у м м ы на п р о м е ж у т к е от 0 до Р. { 2 п+т З а в е д е м м а с с и в А [0.. Р] н а т у р а л ь н ы х ч и с е л . Э л е м е н т Д [ £ ] = 1 , е с л и м ы м о ж е м в ы п л а т и т ь с у м м у i (т. е. с у щ е ­ с т в у е т н а б о р к у п ю р с у м м а р н о г о д о с т о и н с т в а /), и А [/] = = 0, если в ы п л а т и т ь не м о ж е м . Б у д е м с т р о и т ь в с е в о з м о ж н ы е с у м м ы , и с п о л ь з у я по­ с л е д о в а т е л ь н о 0, 1, 2, N купюр. О ч е в и д н о , что с у м м а из н у л я к у п ю р — это н у л ь , поэтому с н а ч а л а Л [ 0 ] = 1 . П р е д п о л о ж и м , что мы н а ш л и в с е в о з м о ж н ы е с у м м ы , к о т о р ы е м о ж н о с о с т а в и т ь , и с п о л ь з у я не б о л е е (к— 1) ку­ пюры М, Л^_!. Д о б а в и м е щ е одну к у п ю р у М . Т е п е р ь мы м о ж е м в ы п л а т и т ь с л е д у ю щ и е с у м м ы : 1) все с у м м ы , к о т о р ы е м о ж н о б ы л о с о с т а в и т ь с по­ мощью купюр М M _i, 2) все с у м м ы , к о т о р ы е м о ж н о б ы л о с о с т а в и т ь с по­ мощью купюр М, M_ у в е л и ч е н н ы е на M . Р а с с т а н о в к а новых пометок в массиве А м о ж е т вы­ глядеть следующим образом: х к ь { k k u k for i : = Р — M [ k ] d o w n t o 0 do if A [ i ] = l t h e n A [ i + M [ k ] ] : = l; М ы п р о х о д и м по м а с с и в у из к о н ц а в н а ч а л о д л я того, ч т о б ы не и с п о л ь з о в а т ь п о в т о р н о о б р а з о в а н н ы е на т е к у ­ щем шаге суммы. После выполнения п + т шагов алгоритм заканчива­ ет р а б о т у . 7. О ч е в и д н о е р е ш е н и е з а д а ч и состоит в и с п о л ь з о в а ­ нии п р о ц е д у р ы , к о т о р а я по з а д а н н ы м к о о р д и н а т а м (но­ меру строки i и номеру столбца / ) элемента определяет максимальное значение элементов, расположенных в н у ж н о й ч а с т и м а т р и ц ы А. 215
О д н а к о н е т р у д н о з а м е т и т ь , что д л я э л е м е н т о в п е р ­ вого с т о л б ц а м а т р и ц ы В с п р а в е д л и в о соотношение В [г, 1] = Л [г, 1], i = 1, . . . N. В ы ч и с л е н и е ж е д р у г и х с т о л б ­ цов м о ж н о п р о в о д и т ь с л е д у ю щ и м о б р а з о м : В [i, / ] = т а х (А [/, /], В [iB\i+\, 1, / - 1], В [L / - 1], П р и этом н е о б х о д и м о у ч и т ы в а т ь , что и н д е к с ы э л е ­ ментов д о л ж н ы находиться в пределах границ массива. 8. Д л я р е ш е н и я п у н к т а а ) з а д а ч и д о с т а т о ч н о вос­ п о л ь з о в а т ь с я т е м ф а к т о м , что д л я о п р е д е л е н и я м и н и ­ мальной величины ш т р а ф а , взимаемого за проход в к л е т к у 1-Й с т р о к и , д о с т а т о ч н о з н а т ь м и н и м а л ь н ы е в е л и ч и н ы ш т р а ф а , в з и м а е м о г о з а п р о х о д в к л е т к и (г — — 1 )-ri с т р о к и , к о т о р ы е я в л я ю т с я с о с е д н и м и р а с с м а т р и ­ ваемой клетке. Поэтому алгоритм решения пункта а) следующий: нц д л я i от 1 д о п Ш т р а ф [i, l ] : = A [ i , 1] кц кц д л я i от 2 до п п ц д л я j от 1 до m Ш т р а ф [i, j j : = Ш т р а ф j ] - f A [i, j]; если j > l и Ш т р а ф [i, Л < Ш т р а ф [ i — 1 , j — 1 ] + A [i, j] I то Ш т р а ф [i, j ] : = Ш т р а ф [ i - 1 , j - l ] + A [ i , j ] ; все е с л и j < m и Ш т р а ф [i, j ] < Ш т р а ф [i — 1, j + + A[i, j | I то Ш т р а ф [i, Л : = Ш т р а ф [ 1 - 1 , j + l] + A [ i , j]; все кц кц 9. а ) О б о з н а ч и м в е р ш и н ы JV-угольника х , в п о р я д к е о б х о д а по к о н т у р у . В д а л ь н е й ш е м б у д е м с ч и т а т ь , что е с л и в в ы к л а д к а х в с т р е ч а 0 216
е т с я в е р ш и н а с и н д е к с о м к, то это то ж е , что и в е р ш и н а с и н д е к с о м к m o d N ( о с т а т о к от д е л е н и я к на N). Р а с с м о т р и м в ы п у к л ы й L - у г о л ь н и к , в е р ш и н а м и кото­ рого я в л я ю т с я L последовательных вершин данного Af-угольника, н а ч и н а я с х и з а к а н ч и в а я x _ в порядке о б х о д а по к о н т у р у . У этого / . - у г о л ь н и к а ( L > 1 ) б у д е м с ч и т а т ь , что о т р е з о к [х ; x _ ]— его д и а г о н а л ь . С у м м у д и а г о н а л е й этой ф и г у р ы о б о з н а ч и м S (р, р-\+ L-1). О ч е в и д н о , что по у с л о в и ю з а д а ч и : S (р, р) = 0; S (р, ) = 0 (у точки и о т р е з к а нет диагоналей); S (р, p + 2) = d (р, /? + 2) ( з д е с ь d(p, р + 2) — д л и н а о т р е з к а [х \ х \). П р е д п о л о ж и м , что н а м и з в е с т н о S(p, p-\-L—1) для в с е х р — 0, N—1 и L = l, к. Н а й д е м S(p, р-\-к). М ы з н а е м , что д и а г о н а л и р а з б и в а ю т ( f e + ^ - у г о л ь ­ н и к на т р е у г о л ь н и к и и что [х , х ] — диагональ, т. е. о д н а из сторон к а к о г о - т о т р е у г о л ь н и к а . И т а к , мы зафиксировали две вершины треугольника — х и х . Третьей вершиной может быть либо х , либо х , либо х _. Е с л и мы с ч и т а е м , что т р е т ь я в е р ш и н а — это х то с у м м а д л и н д и а г о н а л е й б у д е т р р р p+L p+L ] 1 р+2 р р+к р р+1 р+к р+к р+2 1 ь dip, p + k) + S(p, i) + S(i, к). (1) З н а ч е н и я S(p, i) и S(i, к) б ы л и в ы ч и с л е н ы на п р е д ы д у щ и х ш а г а х ; d(р, р-\-к)— расстояние между вершинами х и х , — тоже можем вычислить. Так как нас интересует минимальная сумма триангу­ л я ц и и ( р а з б и е н и я на т р е у г о л ь н и к и ) , то мы и щ е м в ы р а ­ ж е н и е (1) с м и н и м а л ь н ы м з н а ч е н и е м : р S(p, р+к p + k) = d(p, p + k) + min(S(p, i) + S(i, при i — p-\- 1, р + 2, k— 1. Н а х о д и м S(p, p + k) д л я к а ж д о г о р — 0, к)) ( 2 ) N—\. 217
М и н и м у м S (р, p-f-ЛГ — 2 ) д л я р = 0, N— 1 и д а с т и с к о м у ю т р и а н г у л я ц и ю . Д е й с т в и т е л ь н о , S(p, p-\-N — 2) есть стоимость р а з б и в к и фигуры после проведения N — 3 диагоналей. б) Алгоритм аналогичен алгоритму д л я случая а), только вместо ф о р м у л ы (2) надо использовать следующую: S(p, p 4 - ^ ) = m i n max (d(p, p + k), S (p, i), S(i, k)), i где S(p, p-\-k) — д л и н а м а к с и м а л ь н о й д и а г о н а л и в фигуре с вершинами х , х , х (отрезок [х , x ] с ч и т а е т с я д и а г о н а л ь ю ) . М ы б е р е м мини­ м у м по в с е м в о з м о ж н ы м р а з б и в к а м ф и г у р ы , а сто­ и м о с т ь р а з б и в к и о п р е д е л я е т с я к а к м а к с и м у м из д л и н ы д и а г о н а л и d(p, p-\-k) и длин максималь­ н ы х д и а г о н а л е й S (р, i) и S (/, k). 10. Д л я х = а , а и у= Ь b , a и b — символы, ls^i^m, d(x, у) м о ж н о в ы ч и с л и т ь , п р и м е н я я метод динамического программирования. О п р е д е л и м м а с с и в d[0..m, 0..п], э л е м е н т ы к о т о р о г о р р т d[i, р+1 р + к p+k ь j] = d(a ...a , l n t t &,...&,), 0 < л < ! т , i 0 < I / O . П о н я т н о , что d[0, / ] = / ; d[i, 0] = i. Очевидным образом получаем d[i, j] = mm{d[i d[i-l, — 1, d[i, j - l ] + P„), /'—1]+1, где Рц=1, е с л и а,ФЬ/, и Р^ — О, е с л и а = 6 -. В п р а в о й части приведенного выше в ы р а ж е н и я первому элементу в m i n с о о т в е т с т в у е т о п е р а ц и я у д а л е н и я из с т р о к и а ! . . . а _ , а ; п о с л е д н е г о э л е м е н т а а „ п о с л е чего з а d[i—l, /] о п е р а ц и й с т р о к а ai...a _ п р е о б р а з у е т с я в с т р о к у &[...&,, в т о р о м у э л е м е н т у — о п е р а ц и я в с т а в к и с и м в о л а bj в ко­ н е ц с т р о к и b ...b _ п о л у ч е н н о й з а d[i, / — 1 ] о п е р а ц и й из с т р о к и а , . . . а ; т р е т ь е м у — к о н т е к с т н а я з а м е н а я,- на bj, з а м е н а о с у щ е с т в л я е т с я в с л у ч а е а фЬ^ (тогда Р , = 1 ) г у г i l j l u ; { 218 7
и не п р о и с х о д и т п р и с о в п а д е н и и а, и b Величина d [т, п] с о о т в е т с т в у е т м и н и м а л ь н о м у к о л и ч е с т в у о п е р а ­ ций, которые требуются д л я п р е о б р а з о в а н и й строки х в с т р о к у у. А л г о р и т м м о ж е т б ы т ь з а п и с а н т а к : r for i : = 1 to m do d[i, 0 ] : = i ; for j : = 1 t o n do d[0, j ] : = j ; for i : = 1 t o m do for j : = 1 to n d o d [ i , j] = m i n ( d [ i - l , j ] + l , d [ i , j - l ] + l , d[i—1, j-i]+Pij); 11. П у с т ь с т р о к а x с о с т о и т из ц и ф р 0 и 1 и и м е е т д л и н у N, а с т р о к а у ( и з с и м в о л о в Л и В) — д л и н у М. З а в е д е м м а т р и ц у А р а з м е р а NXM, при этом строки м а т р и ц ы п о м е ч а ю т с я г'-й ц и ф р о й с т р о к и х, а с т о л б е ц — / - м с и м в о л о м с т р о к и у. Возьмем в качестве примера # = «00110», у — = «ААААВВАА». П е р в а я цифра строки х (цифра 0) может быть пре­ о б р а з о в а н а в о д н у из п о с л е д о в а т е л ь н о с т е й б у к в «А», «АА», «ААА», «АААА», являющихся префиксами строки у. З а н о с и м с и м в о л «*» в т е с т о л б ц ы п е р в о й с т р о к и , буквы-пометки которых соответствуют последним бук­ вам возможных последовательностей. Т а к и м о б р а з о м , п о м е ч а ю т с я э л е м е н т ы А [1, 1], А [ 1 , 2], Л [ 1 , 3] и Л [ 1 , 4]. Н а к а ж д о м следующем шаге алгоритма будем пре­ о б р а з о в ы в а т ь о ч е р е д н у ю i-ю ц и ф р у с т р о к и х, к о т о р о й с о о т в е т с т в у е т i-я с т р о к а м а т р и ц ы Л . Н а х о д и м «*» в п р е д ы д у щ е й с т р о к е п р и п р о с м о т р е ее слева н а п р а в о (этому столбцу соответствует последняя б у к в а в к а к о й - т о из н е п у с т ы х п о с л е д о в а т е л ь н о с т е й б у к в , п о р о ж д е н н ы х на п р е д ы д у щ е м ш а г е ) . Е с л и т е к у щ у ю ц и ф ­ ру можно п р е о б р а з о в а т ь в последовательность букв, 219
п о м е ч а ю щ и х с л е д у ю щ и е за н а й д е н н ы м с т о л б ц ы , то в э т и х с т о л б ц а х в р а с с м а т р и в а е м о й с т р о к е с т а в и м «*». Д а л е е от м е с т а н а д п о с л е д н е й п о м е ч е н н о й я ч е й к о й и щ е м в п р е д ы д у щ е й с т р о к е «*» и, к о г д а н а х о д и м , повто­ ряем указанные выше операции. Э т и д е й с т в и я п р о в о д и м д а л е е д л я i = 2, N. В и д м а т р и ц ы после N ш а г о в : 0 0 1 1 0 А Л * * * Л * * * А В * * * В * "t* А А * *s* * * Е с л и п о с л е N ш а г о в в п о з и ц и и (N, М) стоит х, строки можно преобразовать друг в друга. то З а м е ч а н и е . Можно обойтись и одномерным массивом. В самом деле, при заполнении следующей строки мы обращаемся только к эле­ ментам предыдущей строки, к каждому — по одному разу. 12. О п р е д е л и м ч е р е з F [i, / ] м и н и м а л ь н о е ч и с л о опе­ раций, которое требуется д л я перемножения группы м а т р и ц с н о м е р а м и от / до / в к л ю ч и т е л ь н о . Я с н о , что F [i, i] = 0. П е р е м н о ж е н и е г р у п п ы м а т р и ц с н о м е р а м и от i до / может производиться различными способами, а имен­ но, д л я н е к о т о р о г о в ы б р а н н о г о k с н а ч а л а п е р е м н о ж а ­ ются н а и л у ч ш и м с п о с о б о м м а т р и ц ы с н о м е р а м и от i до к, з а т е м м а т р и ц ы от ( & + 1 ) - й д о / - й , и, н а к о н е ц , п е р е м н о ­ ж а ю т с я п о л у ч и в ш и е с я м а т р и ц ы . П о н я т н о , что k м о ж е т б ы т ь в е л и ч и н о й от i до / — 1 . У ч и т ы в а я т р е б о в а н и е п о л у ч и т ь н а и л у ч ш и й р е з у л ь т а т , в е л и ч и н а F (/, / ] о п р е д е ­ ляется как F[i, j] = max(F[i, k] + F[k+l, j] + n[i]-n[k + l]-m[/]), где k м о ж е т б ы т ь в е л и ч и н о й от i до / — 1, a n[i], п [ f e + 1], т [j] о п р е д е л я ю т р а з м е р ы м а т р и ц , п о л у ч и в ш и х с я при перемножении в группах. 220
н ц д л я i от 1 до s в ы п о л н я т ь I F[i, i ] : = 0 ; кц н ц д л я р ОТ 1 ДО S — 1 в ы п о л н я т ь нц д л я i от 1 д о s — р в ы п о л н я т ь Kol: =бесконечность; j : = i + p; н ц д л я к от i до j — 1 в ы п о л н я т ь е с л и K o l > F [ i , k] + F [ k + l , j] + n [ i ] * n [ k + + l]*m[j] I то K o l : = F | i , k] + F [ k + 1, j] + n [i]*n [ k + l ] . m [jj; все кц F[i, j ] : = K o l ; КЦ КЦ В я ч е й к е F[l, s] п о с л е з а в е р ш е н и я р а б о т ы а л г о р и т м а будет находиться искомое минимальное число операций. Подумайте, каким образом можно в произведении матриц Л|, A р а с с т а в и т ь с к о б к и т а к , ч т о б ы они определяли оптимальный порядок умножения. 13. а ) Р а с с м о т р и м с н а ч а л а н а и б о л е е о ч е в и д н ы й , но, к а к это обычно бывает, наименее эффективный (очень м е д л е н н ы й ) а л г о р и т м . Б у д е м г е н е р и р о в а т ь все п о д п о с л е ­ д о в а т е л ь н о с т и д а н н о й JV-элементной п о с л е д о в а т е л ь н о с т и и д л я к а ж д о й из п о д п о с л е д о в а т е л ь н о с т е й п р о в е р я т ь , я в л я е т с я л и она с т р о г о в о з р а с т а ю щ е й и м а к с и м а л ь н о й по д л и н е . Б у д е м г е н е р и р о в а т ь ч и с л а от 0 до 2 " — 1 , н а х о д и т ь их д в о и ч н о е п р е д с т а в л е н и е и ф о р м и р о в а т ь п о д п о с л е д о ­ в а т е л ь н о с т ь из э л е м е н т о в м а с с и в а Л с и н д е к с а м и , со­ ответствующими единичным битам в этом представ­ лении. В с е г о с у щ е с т в у е т 2" т а к и х п о д п о с л е д о в а т е л ь н о с т е й , поэтому д а ж е при небольших п результата придется ж д а т ь очень д о л г о . s 221
П р е д п о л о ж и м , что п р и г е н е р а ц и и п о д п о с л е д о в а т е л ь ­ ностей м ы н а ш л и ^ - э л е м е н т н у ю с т р о г о в о з р а с т а ю щ у ю подпоследовательность. В дальнейшем имеет смысл рас­ с м а т р и в а т ь т о л ь к о п о д п о с л е д о в а т е л ь н о с т и , с о с т о я щ и е из б о л е е чем k э л е м е н т о в ( п о д у м а й т е п о ч е м у ) . Р а с с м о т р и м исходную «-элементную последователь­ ность. Е с л и она не я в л я е т с я и с к о м о й , то б у д е м г е н е р и р о ­ в а т ь (N—1)-элементные подпоследовательности. Если и с р е д и них не н а й д е н о р е ш е н и е , то б у д е м р а с с м а т р и в а т ь п о д п о с л е д о в а т е л ь н о с т и из (JV— 2) э л е м е н т о в и т. д. В худшем случае (каком?) придется анализировать п о р я д к а 2" в а р и а н т о в . Д л я б о л е е б ы с т р о г о р е ш е н и я этой з а д а ч и м о ж н о п р и м е н и т ь д и х о т о м и ю по k — к о л и ч е с т в у э л е м е н т о в в подпоследовательности (как?). Р а с с м о т р и м д р у г о е , б о л е е э ф ф е к т и в н о е р е ш е н и е этой з а д а ч и . З а в е д е м м а с с и в ы А, В и С д л и н ы N: м а с с и в A[l..N] и с п о л ь з у е т с я д л я х р а н е н и я ч и с е л исходной по­ с л е д о в а т е л ь н о с т и ; э л е м е н т ВЩ — з н а ч е н и е д л и н ы м а к ­ с и м а л ь н о й в о з р а с т а ю щ е й п о д п о с л е д о в а т е л ь н о с т и , по­ следний элемент которой A в е л и ч и н а С [i] е с т ь и н д е к с э л е м е н т а , п р е д ш е с т в у ю щ е г о э л е м е н т у A [i] в этой м а к с и ­ м а л ь н о й п о д п о с л е д о в а т е л ь н о с т и ( Л [ / ] = 0, е с л и п р е д ш е ­ с т в у ю щ е г о э л е м е н т а нет). Е с л и N = 1, то А [1] и е с т ь и с к о м а я п о д п о с л е д о в а т е л ь ­ ность. П р и этом В [ 1 ] = 1 , С [ 1 ] = 0. П р е д п о л о ж и м , что мы з а п о л н и л и м а с с и в ы В и С от н а ч а л а и д о э л е м е н т а П о п ы т а е м с я п о л у ч и т ь э л е м е н т ы В [i] и C[i]. Д л я э т о г о б у д е м п р о с м а т р и в а т ь м а с с и в Л от 1 д о (i—1)-го э л е м е н т а и и с к а т ь т а к о й и н д е к с к, д л я к о т о р о г о о д н о в р е ­ менно выполняются следующие условия: 1) A[k]<A[i], 2) В [k] м а к с и м а л ь н о . О ч е в и д н о , что м а к с и м а л ь н у ю по д л и н е п о д п о с л е д о в а ­ т е л ь н о с т ь , з а к а н ч и в а ю щ у ю с я э л е м е н т о м Л [г], м о ж н о по­ лучить, приписав этот элемент к максимальной подпос222
л е д о в а т е л ь н о с т и с п о с л е д н и м э л е м е н т о м А [к]. С л е д о в а ­ т е л ь н о , В [i] = B\k]+ 1 и C[i] = k. П у с т ь мы о б р а б о т а л и в с е N э л е м е н т о в м а с с и в а А и н а ш л и м а к с и м а л ь н ы й э л е м е н т м а с с и в а В. П у с т ь э т о э л е м е н т с и н д е к с о м IndexMax. П о построению это длина максимальной подпоследовательности. Получить искомую подпоследовательность можно следующим образом. Пусть / — индекс текущего эле­ мента подпоследовательности, распечатываемой с конца. С н а ч а л а п о л а г а е м j : = IndexMax и печатаем элемент А [/], к о т о р ы й я в л я е т с я п о с л е д н и м . П р е д ш е с т в у ю щ и й е м у в п о с л е д о в а т е л ь н о с т и э л е м е н т и м е е т и н д е к с С [/], поэтому индекс следующего с конца элемента определя­ ется к а к / : = С [ / ] . О п и с а н н ы е действия повторяем пока / н е с т а н е т р а в н ы м 0 (т. е. п о к а не д о й д е м д о н а ч а л а последовательности). З а п и с ь а л г о р и т м а на я з ы к е P a s c a l : for i : = 2 t o N do B [ i ] : = 0 ; C [ 1 ] : = 0 ; B [ l ] : = l; M a x : = l; I n d e x M a x : = 1; for i: = 2 t o N do for k : = 1 to i — 1 d o if ( A [ k ] < A [ i ] ) a n d ( B [ i ] < B [ k ] + l ) t h e n begin C[i]:=k; B[i]:=B[k]+l; if B [ i ] > M a x t h e n begin Max:=B[i] IndexMax: — \ end; end; j : = IndexMax; w h i l e j <C > 0 do begin w r i t e l n (A [j]); J:=C[j] end; 223
В п р о г р а м м е п е р е м е н н а я Мах и с п о л ь з у е т с я д л я х р а ­ нения д л и н ы т е к у щ е й м а к с и м а л ь н о й п о д п о с л е д о в а т е л ь ­ ности. В этой з а д а ч е э л е м е н т м а с с и в а С [г] с о д е р ж и т с с ы л к у на э л е м е н т , п р е д ш е с т в у ю щ и й А [г] в п о д п о с л е д о в а т е л ь н о ­ сти м а к с и м а л ь н о й д л и н ы . Т а к а я с с ы л о ч н а я с т р у к т у р а д а н н ы х н а з ы в а е т с я однонаправленным с п и с к о м . Е с л и у э л е м е н т а е с т ь с с ы л к а к а к на п р е д ы д у щ и й , т а к и на п о с л е д у ю щ и й э л е м е н т , то с п и с о к — двунаправленный (его м о ж н о р е а л и з о в а т ь , е с л и и с п о л ь з о в а т ь не один массив ссылок, а два). В рассмотренной задаче оптимальные значения хра­ н я т с я в м а с с и в е В. П о л у ч и т ь б о л е е э ф ф е к т и в н о е р е ш е н и е м о ж н о , е с л и на к а ж д о м ш а г е х р а н и т ь не все п о л у ч е н н ы е р а н е е о п т и ­ мальные значения и соответствующие подпоследователь­ ности, а т о л ь к о н а и б о л е е п е р с п е к т и в н ы е из них. П у с т ь Л' (L, i) о б о з н а ч а е т м н о ж е с т в о в о з р а с т а ю щ и х п о д п о с л е д о в а т е л ь н о с т е й д л и н ы L, к о т о р ы е с о с т а в л е н ы из э л е м е н т о в с н о м е р а м и от 1 д о / — 1 . И з д в у х п о д п о с л е д о ­ вательностей длины L более перспективной будет та, у которой величина последнего элемента меньше, т а к к а к ее м о ж е т п р о д о л ж и т ь б о л ь ш е е ч и с л о э л е м е н т о в . П у с т ь SP (L, i) — с а м а я п е р с п е к т и в н а я п о д п о с л е д о в а ­ т е л ь н о с т ь д л и н ы L (с м и н и м а л ь н ы м по в е л и ч и н е п о с л е д ­ ним э л е м е н т о м ) , a S(i) — м н о ж е с т в о всех п о д п о с л е д о в а ­ т е л ь н о с т е й SP(L, i) при в с е в о з м о ж н ы х L. В S (г) с о д е р ­ ж и т с я не б о л е е i— 1 п о д п о с л е д о в а т е л ь н о с т е й (с д л и н а м и 1 *— 1>П у с т ь мы з н а е м S (/). Д л я того ч т о б ы о п р е д е л и т ь , к а к и е п о д п о с л е д о в а т е л ь н о с т и м о ж е т п р о д о л ж а т ь г'-й э л е ­ м е н т п о с л е д о в а т е л ь н о с т и А, д о с т а т о ч н о з н а т ь п о с л е д н и е элементы перспективных подпоследовательностей длины 1, 2, N,. и н д е к с ы к о т о р ы х б у д у т х р а н и т ь с я в м а с с и ­ в е Ind. Последний элемент перспективной подпоследователь­ ности д л и н ы р с т р о г о м е н ь ш е п о с л е д н е г о э л е м е н т а п е р с 224
п е к т и в н о й п о д п о с л е д о в а т е л ь н о с т и д л и н ы р-4-l те почему). Поэтому г'-й э л е м е н т должен (объясни­ продолжить подпоследовательность максимальной длины, последний э л е м е н т к о т о р о й м е н ь ш е г'-го э л е м е н т а . Учитывая упорядоченность последних элементов пер­ спективных подпоследовательностей, поиск можно сде­ л а т ь методом половинного деления (дихотомией), исполь­ зуя массив Ind. П р и п р и с о е д и н е н и и i-ro э л е м е н т а к т а к о й п о д п о с л е д о ­ вательности длины р ее длина увеличивается на 1, а п о с л е д н и м э л е м е н т о м с т а н о в и т с я А [г]. П р и э т о м мно­ ж е с т в о S (г-4- 1 ) с о в п а д а е т с S (г), з а и с к л ю ч е н и е м последовательности SP(p~\-l, г ' + 1 ) . полученной под­ добав­ л е н и е м г'-го э л е м е н т а к п о д п о с л е д о в а т е л ь н о с т и SP (р, г). При хранении подпоследовательности для каждого эле­ мента удобно хранить номер предшествующего ему эле­ мента. б) Д л я каждого индекса i найдем подпоследова­ т е л ь н о с т ь м а к с и м а л ь н о й д л и н ы с р а з р ы в о м в А [г]. Б у д е м и с к а т ь м а к с и м а л ь н у ю по д л и н е п о д п о с л е д о ­ вательность, заканчивающуюся и м а к с и м а л ь н у ю по д л и н е в элементе А [г], подпоследовательность, н а ч и н а ю щ у ю с я в нем ( д л я э т о г о б у д е м п р о с м а т р и ­ в а т ь м а с с и в А не с л е в а н а п р а в о , а с п р а в а н а л е в о ) . в) З а в е д е м м а с с и в С [ 0 . . г а + 1 , I..N]. В нем i-я с т р о к а будет хранить информацию о последовательностях с i—1 разрывом (нулевая строка — фиктивная); /-й э л е м е н т в этой с т р о к е есть д л и н а с а м о й д л и н н о й подпоследовательности элементов «хвоста» масси­ ва А (от / - г о э л е м е н т а до га-го), начинающейся в / - й п о з и ц и и и и м е ю щ е й не б о л е е i—1 разрывов. Алгоритм: 1. З а п о л н и т ь н у л е в у ю с т р о к у н у л я м и ( ч т о б ы б ы л о з а п о л н и т ь п е р в у ю с т р о к у по о б щ е м у 2. Д л я следующие каждой с т р о к и г от 1 до гаг+1 можно алгоритму). выполнить действия: 8 Информатика. 8—9 кл. 225
2 . 1 . Д л я / - г о э л е м е н т а м а с с и в а А (/' и з м е н я е т с я от N д о 1) н а й т и м а к с и м а л ь н у ю по д л и н е п о д п о с л е д о в а ­ тельность, которую можно присоединить к этому эле­ менту так, чтобы получить подпоследовательность мак­ с и м а л ь н о й д л и н ы с не б о л е е чем i—1 р а з р ы в о м . Д л я этого: 2 . 1 . 1 . н а й т и э л е м е н т А [к] п о с л е д о в а т е л ь н о с т и А, б о л ь ш и й А [/] и с т о я щ и й в м а с с и в е А п р а в е е / - г о э л е м е н т а и с м а к с и м а л ь н ы м C[i, 2.1.2. п р о с м о т р е т ь э л е м е н т ы ( i — 1)-й с т р о к и м а т ­ р и ц ы С, н а ч и н а я с ( / + 1 ) - г о и д о к о н ц а ; найти максимальный из них, пусть это C[i-l, 5]; 2.1.3. с р а в н и т ь C[i—1, s] с C[i, k], больший из них ( о б о з н а ч и м его С [row, col]), у в е л и ч е н ­ ный на 1, з а п о м н и т ь в C[i, / ] ; это и б у д е т д л и н а максимальной подпоследовательности, начина­ ю щ е й с я в п о з и ц и и /, с не б о л е е чем i—1 р а з ­ рывом; 2.1.4. з а п о м н и т ь индексы row и col элемента м а с с и в а С, п р е д ш е с т в у ю щ е г о C[i, /'], к а к э л е ­ м е н т ы X[i, / ] и Y[i, / ] с о о т в е т с т в е н н о . После окончания цикла максимальный элемент ( т + 1 ) - й строки м а т р и ц ы С и е с т ь м а к с и м а л ь н а я д л и н а возрастающей подпоследовательности с т разрывами. В ы п и с а т ь всю п о д п о с л е д о в а т е л ь н о с т ь в о б р а т н о м п о р я д ­ ке м о ж н о с л е д у ю щ и м о б р а з о м : д л я к а ж д о г о э л е м е н т а п о д п о с л е д о в а т е л ь н о с т и в м а с с и в а х X и У х р а н и т с я ин­ формация о предшественнике. Мы, начиная с макси­ м а л ь н о г о э л е м е н т а ( т - | - 1 ) - й с т р о к и м а т р и ц ы С, в о с с т а ­ н а в л и в а е м всю п о д п о с л е д о в а т е л ь н о с т ь . Обоснование алгоритма. П у с т ь и з в е с т н ы C[i— 1, / ] д л я всех / от 1 д о N и д л я н е к о т о р о г о i, а т а к ж е C[i, k] д л я k от / - j - 1 д о N. М ы хотим в ы ч и с л и т ь С [i, /']. Д л я /-го элемента массива А существует максималь226
н а я по д л и н е п о д п о с л е д о в а т е л ь н о с т ь с не б о л е е чем I — 1 р а з р ы в о м , н а ч и н а ю щ а я с я с Л [/']. В т о р о й э л е м е н т ( о б о з н а ч и м его A [k]) этой м а к с и м а л ь н о й п о д п о с л е д о в а ­ т е л ь н о с т и ( е с л и он, конечно, е с т ь ) м о ж е т б ы т ь : 1 ) б о л ь ш е Л [у]; т о г д а н а х о д и м е г о с р е д и э л е м е н т о в , обладающих следующими свойствами: а) & > / ; б ) C[i, k] м а к с и м а л ь н ы й (т. е. мы п р и с о е д и н я е м к Л [у] м а к с и м а л ь н у ю по д л и н е п о д п о с л е д о в а т е л ь ­ н о с т ь с не б о л е е ч е м i—1 разрывом, фор­ м и р у я п о д п о с л е д о в а т е л ь н о с т ь о п я т ь не б о л е е чем с i— 1 р а з р ы в о м ) ; 2 ) м е н ь ш е или р а в н ы й Л [у]; т о г д а и щ е м его с р е д и элементов, обладающих следующими свойствами: а) k>j; б ) C[i—1, k] м а к с и м а л ь н ы й (т. е. п р и с о е д и н я е м м а к с и м а л ь н у ю п о д п о с л е д о в а т е л ь н о с т ь с не б о л е е чем i — 2 р а з р ы в а м и , ф о р м и р у я п о д п о с л е д о в а т е л ь ­ н о с т ь с не б о л е е чем i — 1 р а з р ы в о м ) . Полученная подпоследовательность имеет макси­ мальную длину, так как длина подпоследовательности, к о т о р а я н а ч и н а е т с я с Л [к], — м а к с и м а л ь н а . У п о м и н а в ­ ш и е с я в ы ш е и н д е к с ы row и col, к о т о р ы е з а п о м и н а ю т с я в X[i, у] и Y[i, у] с о о т в е т с т в е н н о , о б о з н а ч а ю т с л е д у ю щ е е : col — и н д е к с с л е д у ю щ е г о з а Л [у] э л е м е н т а в м а к с и ­ м а л ь н о й по д л и н е п о д п о с л е д о в а т е л ь н о с т и , начинаю­ щ е й с я в п о з и ц и и у и и м е ю щ е й не б о л е е i—1 р а з р ы в о в ; row — 1 — м а к с и м а л ь н о е к о л и ч е с т в о р а з р ы в о в в п о д п о с ­ л е д о в а т е л ь н о с т и , н а ч и н а ю щ е й с я в Л [col]. 14. Д л я р е ш е н и я з а д а ч и э л е м е н т ы м а с с и в а у д о б н о у п о р я д о ч и т ь по а б с о л ю т н о й в е л и ч и н е ( в п о р я д к е н е у б ы ­ в а н и я ) . Е с л и в м а с с и в е е с т ь э л е м е н т ы , р а в н ы е 0, то один из них и б у д е т п о с л е д н и м э л е м е н т о м и с к о м о й п о с л е д о в а ­ т е л ь н о с т и , п о э т о м у их м о ж н о и г н о р и р о в а т ь . П у с т ь /С, обозначает максимальное количество элементов, которое м о ж е т н а х о д и т ь с я в некоторой п о с л е д о в а т е л ь н о с т и с т р е 227
буемым свойством, последним элементом которой я в л я ­ е т с я г'-й э л е м е н т . П о н я т н о , что н а и м е н ь ш е м у по а б с о л ю т н о й в е л и ч и н е э л е м е н т у не м о ж е т п р е д ш е с т в о в а т ь ни один э л е м е н т , п о э т о м у К = 0, где р— и н д е к с п е р в о г о н е н у л е в о г о э л е ­ мента. Д л я каждого следующего элемента с номером /, / = p-f-l, N, н е о б х о д и м о о п р е д е л и т ь м а к с и м а л ь н о е количество элементов, которое может предшествовать р а с с м а т р и в а е м о м у э л е м е н т у , с учетом т р е б у е м о г о с в о й ­ с т в а . П о н я т н о , что это к о л и ч е с т в о е с т ь м а к с и м у м из величин К , К , К , где э л е м е н т ы с н о м е р а м и р р, р Р{ Р2 р и 2 р, p^Pi-zCpz^.... <p <j являются делителями элемента с номером /. Поэтому мы имеем рекуррентную ф о р м у л у д л я в ы ч и с л е н и я /С : т m ; K, = max(K , Pl К, К )+\. Р2 рт З н а ч е н и е K , в ы ч и с л е н н о е по о п и с а н н о м у в ы ш е п р а ­ вилу, и определяет м а к с и м а л ь н о е количество элементов, которое может находиться в некоторой последовательно­ сти с т р е б у е м ы м с в о й с т в о м ( б е з у ч е т а в о з м о ж н о г о н у л я в конце последовательности). Д л я того ч т о б ы у с т а н о в и т ь , к а к и е э л е м е н т ы о б р а з у ю т максимальную последовательность, достаточно для к а ж ­ дого н о м е р а / п о м н и т ь тот н о м е р из р р > -••» Рт> котором д о с т и г а е т с я м а к с и м у м д л я чисел К , К, N н ь а 2 р Р2 К • Эти номера можно определять п а р а л л е л ь н о с вычис­ л е н и е м з н а ч е н и я K(j) в некотором массиве, например П Р Е Д О К . И с п о л ь з у я эту и н ф о р м а ц и ю , легко, о п р е д е л и т ь н о м е р а э л е м е н т о в п о с л е д о в а т е л ь н о с т и , п р о х о д я от э л е ­ м е н т а i с м а к с и м а л ь н ы м з н а ч е н и е м K к э л е м е н т у , кото­ р ы й е м у п р е д ш е с т в у е т ( П Р Е Д О К (I)), до тех п о р , пока не придем к первому элементу / последовательности ( П Р Е Д О К (/) = 0. 15. О ч е в и д н о , что п а р а л л е л е п и п е д ы м о ж н о п о в е р н у т ь так, чтобы р а з м е р ы ребер к а ж д о г о п а р а л л е л е п и п е д а ш л и в н е у б ы в а ю щ е м п о р я д к е . З а ф и к с и р у е м этот п о р я р t 228
док. Вложение параллелепипеда В в п а р а л л е л е п и п е д С возможно только тогда, когда д л я двух параллелепи­ п е д о в В(Ь(\) Ь(п)) и С ( с ( 1 ) , с(п)) в ы п о л н я ю т с я н е р а в е н с т в а b (k)^.c (k), k — \, п. 16. М е т о д р е ш е н и я этой з а д а ч и а н а л о г и ч е н и с п о л ь з о ­ ванному при решении задачи о нахождении м а к с и м а л ь ­ ной по д л и н е в о з р а с т а ю щ е й п о д п о с л е д о в а т е л ь н о с т и . П у с т ь а, Ь, с — н а т у р а л ь н ы е ч и с л а . Б у д е м р а с с м а т р и в а т ь т о л ь к о с л у ч а й а>с, так как в с л у ч а е a<Cb з а д а ч а н е р а з р е ш и м а , а в с л у ч а е b^a*£Zc с р а з у п о л у ч а е м , что k = 1 и х [ 1 ] = а. О б о з н а ч и м ч е р е з L м н о ж е с т в о д е л и т е л е й ч и с л а а, л е ж а щ и х на о т р е з к е [Ь, с]. К о л и ч е с т в о всех д е л и т е л е й ч и с л а а не п р е в ы ш а е т 2л[а ( е с л и a — f-g, то / ^ д / а ~ , g~^a, в с е г о р а з н ы х / м о ж е т б ы т ь не б о л е е а, с т о л ь к о ж е и р а з н ы х g). П у с т ь L , — м и н и м а л ь н ы й э л е м е н т из L, a L — максимальный. Пусть в массиве S [ l . . p ] первый э л е м е н т р а в е н е д и н и ц е , а все о с т а л ь н ы е — д е л и т е л и ч и с л а а, не м е н ь ш и е Ь, з а п и с а н н ы е в п о р я д к е в о з р а с т а ­ н и я . И з у т в е р ж д е н и я с л е д у е т , что р^.а-\-2. Б у д е м и с к а т ь м и н и м а л ь н у ю по д л и н е п о д п о с л е д о в а ­ т е л ь н о с т ь э л е м е н т о в м а с с и в а S, к о т о р а я н а ч и н а е т с я е д и ­ н и ц е й , з а к а н ч и в а е т с я а, к а ж д ы й э л е м е н т которой д е ­ л и т с я на п р е д ы д у щ и й , п р и ч е м ч а с т н о е п р и н а д л е ж и т м н о ж е с т в у L. В с л у ч а е , если а, Ь, с, хЩ— ц е л ы е , в м а с с и в S п о м е ­ щ а е м в п о р я д к е в о з р а с т а н и я м о д у л я все д е л и т е л и ч и с л а а, н а ч и н а я с м и н и м а л ь н о г о э л е м е н т а в L. Д а л е е — аналогично. 17. З а д а ч у м о ж н о п е р е ф о р м у л и р о в а т ь с л е д у ю щ и м образом. П о с л е д о в а т е л ь н о с т ь из п в а г о н о в , з а н у м е р о в а н н ы х от 1 д о и, н е о б х о д и м о р а з б и т ь на не б о л е е чем т п о д п о с л е ­ д о в а т е л ь н о с т е й , в к а ж д о й из к о т о р ы х н о м е р а в а г о н о в возрастают. О д н и м из с а м ы х п р о с т ы х а л г о р и т м о в с о р т и р о в к и в а г о н о в я в л я е т с я а л г о р и т м , о с н о в ы в а ю щ и й с я на с л е д у ю ­ щем правиле. 2 229
1) П о м е щ а е м о ч е р е д н о й в а г о н ( н о м е р к о т о р о г о k) на п у т ь с м и н и м а л ь н о в о з м о ж н ы м н о м е р о м , при у с л о в и и , что п о с л е д н и й в а г о н , с т о я щ и й на этом п у т и , имеет н о м е р м е н ь ш е k. 2 ) Е с л и все в а г о н ы с о с т а в а б у д у т т а к и м о б р а з о м р а с п о л о ж е н ы на с т а н ц и и , то, о ч е в и д н о , что вагон № 1 на к а к о м - т о пути б у д е т с а м ы м п р а в ы м и его м о ж н о п о д а т ь на в ы х о д . З а т е м в а г о н № 2 т а к ж е м о ж е т б ы т ь п о д а н на в ы х о д , т а к к а к не м о ж е т с т о я т ь на пути з а в а г о н о м с н о м е р о м , б о л ь ш и м 2, и т. д. 3) Е с л и ж е к а к о й - т о в а г о н н е л ь з я п о м е с т и т ь ни на один путь на с т а н ц и и , то это з н а ч и т , что все пути «перекрыты» вагонами с большими номерами, п р и ч е м п о с л е д н и е в а г о н ы на этих п у т я х р а с п о л о ­ жены в порядке убывания. Вместе с последним в а г о н о м , не н а ш е д ш и м с е б е м е с т а , эти т. в а г о н о в в исходной п о с л е д о в а т е л ь н о с т и с о с т а в л я ю т у б ы в а ­ ющую подпоследовательность длины т-\-\. О т м е т и м , что если м о ж н о о т с о р т и р о в а т ь п о с л е д о в а ­ т е л ь н о с т ь в а г о н о в , то м о ж н о о т с о р т и р о в а т ь т а к ж е и л ю ­ б у ю их п о д п о с л е д о в а т е л ь н о с т ь , и н а о б о р о т . П о э т о м у из существования убывающей подпоследовательности дли­ ны т + 1 с л е д у е т , что и с х о д н у ю п о с л е д о в а т е л ь н о с т ь от­ сортировать нельзя. 18. М о ж н о , конечно, ч и с л о А у м н о ж и т ь с а м о на с е б я п—1 р а з , но д л я этого н а д о в ы п о л н и т ь п — 1 о п е р а ц и ю у м н о ж е н и я . Р а с с м о т р и м метод, требующий меньшего ч и с л а у м н о ж е н и й (он, о д н а к о , не в с е г д а д а е т мини­ мальное число умножений). Е с л и п — четное (п = 2т), то б у д е м в ы ч и с л я т ь А", используя тождество A = (A f, е с л и ж е я = 2 т + 1 , то A = (A f-A. Т а к и м о б р а з о м , в о з в е д е н и е А в 13-ю с т е п е н ь б у д е т выглядеть следующим образом: n m n m A = (A f-A=((A ff-A=((A-A-A и вычисление требует 5 операций ]3 230 6 3 ff • А, умножения.
П р и м е ч а н и е . Используя данный метод, для возведения числа в степень п потребуется порядка logy2 операций умножения. Программа на я з ы к е P a s c a l может выглядеть так: v a r A, N : i n t e g e r ; function power ( N : i n t e g e r ) : integer; begin if N > 1 t h e n if o d d ( N ) t n e n {N нечетно?} p o w e r : = S Q R ( p o w e r (N div 2)) * A e l s e p o w e r : = S Q R ( p o w e r (N div 2)) else p o w e r : = A end; begin r e a d (A, N); writeln (power (N)); end; М о ж н о ту ж е с а м у ю идею р е а л и з о в а т ь и п о - д р у г о м у ( д а л е е мы п р и в о д и м в ы д е р ж к у из к н и г и Д . К н у т а « И с ­ к у с с т в о п р о г р а м м и р о в а н и я д л я Э В М » , т. 2, с. 482): « З а п и ш е м п в двоичной системе счисления и з а м е н и м в этой з а п и с и к а ж д у ю ц и ф р у 1 п а р о й б у к в SX, а к а ж д у ю ц и ф р у 0 — б у к в о й S, п о с л е чего в ы ч е р к н е м к р а й н ю ю л е в у ю п а р у б у к в SX. Р е з у л ь т а т , ч и т а е м ы й с л е в а н а п р а ­ во, п р е в р а щ а е т с я в п р а в и л о в ы ч и с л е н и я х", е с л и б у к в у S интерпретировать как операцию возведения в квадрат, а б у к в у X — к а к о п е р а ц и ю у м н о ж е н и я на х. Н а п р и м е р , е с л и п = 2 3 , то его д в о и ч н ы м п р е д с т а в л е ­ н и е м б у д е т 10111; с т р о и м п о с л е д о в а т е л ь н о с т ь SX S SX SX SX, у д а л я е м из нее н а ч а л ь н у ю п а р у SX и в итоге п о л у ч а е м с л е д у ю щ е е п р а в и л о в ы ч и с л е н и я : S SX SX SX. С о г л а с н о э т о м у п р а в и л у , мы д о л ж н ы « в о з в е с т и х в к в а д ­ р а т , з а т е м с н о в а в о з в е с т и в к в а д р а т , з а т е м у м н о ж и т ь на х, в о з в е с т и в к в а д р а т , у м н о ж и т ь на х, в о з в е с т и в к в а д р а т и, н а к о н е ц , у м н о ж и т ь на х»; при э т о м м ы п о с л е д о в а т е л ь 9 4 5 10 11 22 91 но в ы ч и с л я е м лг, х , х , х , х , х , х . Э т о т « б и н а р н ы й метод» л е г к о о б о с н о в а т ь , р а с с м о т р е в п о с л е д о в а т е л ь н о с т ь п о л у ч а е м ы х в ходе в ы ч и с л е н и я п о к а 231
з а т е л е й : если S и н т е п р е т и р о в а т ь к а к о п е р а ц и ю у м н о ж е ­ ния на 2, а X — к а к о п е р а ц и ю п р и б а в л е н и я 1 и если н а ч а т ь с 1, а не с х, то н а ш е п р а в и л о д а е т н а м в со­ о т в е т с т в и и со с в о й с т в а м и д в о и ч н о й с и с т е м ы с ч и с л е н и я число л». П р и в е д е н н ы й м е т о д не д а е т м и н и м а л ь н о г о ч и с л а о п е р а ц и й у м н о ж е н и я . Д л я в ы ч и с л е н и я х н а м , по и з л о ­ ж е н н о м у в ы ш е методу, п о т р е б у е т с я 7 о п е р а ц и й у м н о ж е ­ ния. В д е й с т в и т е л ь н о с т и , их н е о б х о д и м о т о л ь к о 6: 2г Y . v 2 JV * Л 3 * JV 5 j.10 Л* ' Л 20 23 * JV * JV * Алгоритм нахождения минимального числа операций (кроме полного перебора) сейчас неизвестен. 19. П у с т ь z — м а с с и в из N э л е м е н т о в , у — из М. П о ­ л о ж и м i = l и / = 1. Б е р е м э л е м е н т z[i] и и щ е м мини­ м а л ь н о е k, j^k^M, т а к о е , что y[k] = z[i] ( м ы н а х о д и м о ч е р е д н о й с о в п а д а ю щ и й с и м в о л в с т р о к а х z и у). П о л а ­ гаем t ' : = i + l и / : = £ ­ ) ­ ! . Повторяем поиск элемента z [/] в о с т а в ш е й с я ч а с т и п о с л е д о в а т е л ь н о с т и у. У с л о в и я окончания поиска: а) е с л и i с т а л о б о л ь ш е N (т. е. все э л е м е н т ы м а с с и в а z я в л я ю т с я п о д п о с л е д о в а т е л ь н о с т ь ю э л е м е н т о в у), тогда z можно получить вычеркиванием элементов из у; б) е с л и в о с т а в ш е й с я ч а с т и п о с л е д о в а т е л ь н о с т и у не н а й д е н о э л е м е н т а , с о в п а д а ю щ е г о с о ч е р е д н ы м z[i], то z из у п о л у ч и т ь н е л ь з я . 20. П у с т ь х = (х х х\ у = (у у, уУ З а в е д е м м а т р и ц у А [0..т, 0..«]. Э л е м е н т А [г, /'] б у д е т длиной максимальной общей подпоследовательности (х *;) и (у г/Д С н а ч а л а А [г, 0] = Л [0, / ] = 0, i = 0, т, / = 0, п. П у с т ь лг, = г/у, т о г д а т р е б у е т с я у в е л и ч и т ь д л и н у м а к ­ с и м а л ь н о й о б щ е й п о д п о с л е д о в а т е л ь н о с т и (х ^_,) и (yi, ) на 1: ь ь 2 т и 2 п ъ 1у A [i, j] = A[i— 232 1, / — если х = х у г
В случае, если A[i, f\ = max{A[i—\, то, о ч е в и д н о , /], A[i, но т а к к а к в с е г д а A[i—1, А [г, j] = max{A[i—\, / ' — 1 ] , A[i—\, /—1]}, / — 1 ] < 1 Л [/, / — 1], то j], A[i, j—l]}. В е л и ч и н а A [m, n] и д а е т д л и н у м а к с и м а л ь н о й о б щ е й подпоследовательности. Найдем саму подпоследователь­ н о с т ь . П у с т ь А [т, n] = d. Д в и г а я с ь по п о с л е д н е й с т р о к е с п р а в а н а л е в о , и щ е м с а м ы й л е в ы й э л е м е н т в этой с т р о к е со з н а ч е н и е м d. Д в и г а е м с я от него в в е р х по с т о л б ц у в поиске элемента столбца с минимальным первым и н д е к с о м и з н а ч е н и е м d. П у с т ь это А [г, / ] . Т о г д а э л е м е н т A[i— 1, / — 1 ] р а в е н d— 1, a x и y — это п о с л е д н и е о б щ и е с о в п а д а ю щ и е э л е м е н т ы в х и у. t t Н а ч и н а я от э л е м е н т а A [i—1, / — 1 ] , п о в т о р я е м , к а к б ы л о о п и с а н о в ы ш е , д в и ж е н и е в л е в о и в в е р х по м а т р и ц е , находим предпоследний совпадающий элемент в х и у и т. д . Программа: for i : = 0 t o m do A [i, 0 ] : = 0 ; for j : = 0 t o n do A [ 0 , j ] : = 0 ; for i : = 1 t o m do for j : = 1 to n do if x [ i ] = y [i] t h e n A [ i , j ] : = A [ i - l , j — 114- I e l s e A [ i , j ] : = m a x ( A [ i — 1 , j], A [ i , j — l]); w r i t e l n ( ' Д л и н а п о с л е д о в а т е л ь н о с т и = ', A [m, n]); d : = A [ m , n]; i : = m ; j : = n ; w h i l e ( d < > 0 ) do begin w h i l e A [ i , j — 1 ] = d do j : = j — 1; w h i l e A [ i — 1 , j ] = d do i : = i — 1; write ('Элемент последовательности номер', d, ' е с т ь ' , x[i]); i : = i — 1; j : = j — 1; d : = d — 1; {переход к п о и с к у предшествую-} {щего э л е м е н т а в п о с л е д о в а т е л ь н о с т и } end; 233
2 1 . В п о с л е д о в а т е л ь н о с т я х х и у и з б а в л я е м с я от н е з н а ч а щ и х н у л е й . Е с л и х о т ь о д н а из п о с л е д о в а т е л ь н о ­ стей с т а л а пустой, то 2 = 0. Е с л и п о с л е д о в а т е л ь н о с т и не п у с т ы е , т о к р а й н и е л е в ы е ц и ф р ы и в х, и в у р а в н ы 1. Д л я п о л у ч е н н ы х п о с л е д о в а т е л ь н о с т е й и с п о л ь з у е м а л ­ г о р и т м з а д а ч и 2 0 ( д л я п о л у ч е н и я м а к с и м а л ь н о г о z не­ о б х о д и м о , чтобы с т а р ш а я ц и ф р а z б ы л а 1 и д в о и ч н а я з а п и с ь г и м е л а м а к с и м а л ь н у ю д л и н у ) , но при этом д л я к а ж д о г о А [/", / ] — д л и н ы п о с л е д о в а т е л ь н о с т и , необходи­ мо х р а н и т ь д о б а в о ч н о и с а м у п о с л е д о в а т е л ь н о с т ь ; п р и п р и с в о е н и и з н а ч е н и я A [i, / ] о д н о в р е м е н н о б у д е м з а п о м и ­ нать и последовательность максимальной длины. Если т а к и х н е с к о л ь к о , то б е р е м из них п о с л е д о в а т е л ь н о с т ь с максимальным значением. Поэтому алгоритм задачи 20 з а п и ш е т с я с л е д у ю щ и м о б р а з о м . П у с т ь S [0.. т, 0.. п] — м а с с и в с т р о к . В S [г, /'] б у д е т х р а н и т ь с я п о д п о с л е д о в а т е л ь н о с т ь , д л и н а к о т о р о й A [i, /]. for i : = 0 for j : = 0 for i : = 0 for j : = t o m do A [ i , 0 ] : = 0 ; to n do A [ j , 0 ] : = 0 ; to m do 0 to n do S[i, ] ] : = " ; for i : = 1 to m do for j : = 1 to n do begin if x [i] = y [j] t h e n begin A[i; j ] : = A [ i - l , j - l ] + l ; S[i, j ] : = S [ i - l , j - l ] + x[i]; end; A[i, j ] : = m a x ( A [ i , j], A [ i - 1 , j], A[i, j — 1 ] ) ; S [ i , j ] : = m a x ( S [ i , j ] , S [ i - 1 , j ] , S [i, j - 1 ] ) ; end; w r i t e (A [m, n|, ' — д л и н а ' , S [m, n]);
Глава 5 . ЗАДАЧИ КОМБИНАТОРИКИ С з а д а ч а м и , в к о т о р ы х п р и х о д и т с я в ы б и р а т ь те и л и и н ы е п р е д м е т ы , р а с п о л а г а т ь их в о п р е д е л е н н о м п о р я д к е и отыскивать среди всевозможных расположений наи­ лучшее, люди сталкиваются постоянно. Н а п р и м е р , на­ ч а л ь н и к цеха р а с п р е д е л я е т н е с к о л ь к о в и д о в р а б о т м е ж ­ ду имеющимися станками, агроном р а з м е щ а е т посевы с е л ь с к о х о з я й с т в е н н ы х к у л ь т у р на н е с к о л ь к и х п о л я х , з а ­ вуч ш к о л ы с о с т а в л я е т р а с п и с а н и е у р о к о в . П р и р е ш е н и и т а к о г о в и д а з а д а ч в о з н и к л и п о н я т и я об у п о р я д о ч е н и и и группировании объектов. С этими понятиями и работа­ ет н а у к а к о м б и н а т о р и к а . Комбинаторика — это о б л а с т ь м а т е м а т и к и , в к о т о р о й изучаются вопросы о том, сколько различных комбина­ ц и й , п о д ч и н е н н ы х тем или и н ы м у с л о в и я м , м о ж н о с о с т а ­ в и т ь из з а д а н н ы х о б ъ е к т о в . Иногда количество вариантов, которые надо проана­ л и з и р о в а т ь п р и р е ш е н и и к о м б и н а т о р н о й з а д а ч и , очень велико. В этом случае единственной возможностью полу­ ч е н и я р е з у л ь т а т а з а д о п у с т и м о е в р е м я , а не ч е р е з с т о л е ­ тия, является использование компьютера. К а к и л ю б а я д р у г а я н а у к а , к о м б и н а т о р и к а име­ ет с в о ю т е р м и н о л о г и ю . О с н о в н ы м п о н я т и е м к о м б и н а т о ­ р и к и я в л я е т с я комбинаторный объект, и л и соединение. П р и в ы б о р е m э л е м е н т о в из п р а з л и ч н ы х э л е м е н т о в п р и н я т о г о в о р и т ь , что они о б р а з у ю т с о е д и н е н и е из п э л е ­ м е н т о в по пг. В з а в и с и м о с т и от того, и м е е т л и з н а ч е н и е п о р я д о к э л е м е н т о в в с о е д и н е н и и или нет, а т а к ж е от того, в х о д я т в с о е д и н е н и е все п э л е м е н т о в или т о л ь к о ч а с т ь их, р а з л и ­ ч а ю т т р и в и д а с о е д и н е н и й . Это — перестановки, разме­ щения и сочетания. 235
§ 1. С О Е Д И Н Е Н И Я 1.1. Перестановки С о е д и н е н и я , к а ж д о е из к о т о р ы х с о д е р ж и т л р а з л и ч ­ ных э л е м е н т о в , в з я т ы х в о п р е д е л е н н о м п о р я д к е , н а з ы в а ­ ю т с я перестановками из п э л е м е н т о в . С л е д у е т о т м е т и т ь , что п о р я д о к э л е м е н т о в в п е р е с т а н о в к е с у щ е с т в е н е н и в образовании перестановки участвуют все п элементов ( т = л). П р и м е р . В ы п и ш е м все п е р е с т а н о в к и из э л е м е н т о в а, Ь, с: abc, acb, bac, bca, cab, cba. К о л и ч е с т в о всех с п о с о б о в , к о т о р ы м и м о ж н о п е р е с т а ­ в и т ь п р а з л и ч н ы х п р е д м е т о в , р а с п о л о ж е н н ы х на л р а з ­ личных местах, принято обозначать Р (читается «число п е р е с т а н о в о к из п»). Н а й д е м Р . Н а п е р в о е из и м е ю щ и х с я п м е с т п р е д м е т м о ж е т б ы т ь в ы б р а н п с п о с о б а м и , на в т о р о е м е с т о — (п — — 1) с п о с о б о м , на т р е т ь е место — ( « — 2) с п о с о б а м и и т. д. Н а п р е д п о с л е д н е е м е с т о п р е д м е т в ы б и р а е т с я из двух оставшихся, а для последнего места выбор предме­ та единственен. О б щ е е количество способов будет равно п р о и з в е д е н и ю п(п—1)(л — 2 ) - . . . - 2 - 1 . Такое произведе­ ние н а з ы в а е т с я факториалом ч и с л а п и о б о з н а ч а е т с я л! Т а к и м о б р а з о м , Р = п\ П р и м е р . С к о л ь к о всего ш е с т и з н а ч н ы х ч е т н ы х чи­ с е л м о ж н о с о с т а в и т ь из ц и ф р 1, 3 , 4, 5, 7 и 9, е с л и в к а ж ­ д о м из э т и х чисел ни о д н а ц и ф р а не п о в т о р я е т с я ? П о с л е д н я я ц и ф р а четного ч и с л а д о л ж н а б ы т ь четной, поэтому в данном случае последней цифрой числа может б ы т ь т о л ь к о ц и ф р а 4. О с т а в ш и е с я п я т ь ц и ф р могут с т о я т ь на о с т а в ш и х с я п я т и м е с т а х в л ю б о м п о р я д к е . П о э т о м у к о л и ч е с т в о с п о с о б о в их р а с с т а н о в к и р а в н о Р — = 5! = 120. И н о г д а т р е б у е т с я не п р о с т о п о д с ч и т а т ь к о л и ч е с т в о п е р е с т а н о в о к из л э л е м е н т о в , но и н а й т и к а ж д у ю из них. п п п ь 236
С у щ е с т в у е т н е с к о л ь к о а л г о р и т м о в г е н е р а ц и и всех п е р е с т а н о в о к из я э л е м е н т о в . О н и р а з л и ч а ю т с я п о р я д ­ ком п о л у ч е н и я п е р е с т а н о в о к . Р а с с м о т р и м один из х о р о ш о и з в е с т н ы х а л г о р и т м о в , в процессе исполнения которого перестановки п чисел р а с п о л а г а ю т с я лексикографически (в словарном поряд­ ке). Это з н а ч и т , что п е р е с т а н о в к и с р а в н и в а ю т с я с л е в а н а п р а в о п о э л е м е н т н о и б о л ь ш е й из них я в л я е т с я т а , у которой р а н ь ш е встретился элемент, больший соответ­ с т в у ю щ е г о е м у э л е м е н т а во в т о р о й п е р е с т а н о в к е . ( Н а ­ п р и м е р , е с л и S = ( 3 , 5, 4, 6, 7), a Ь = (3, 5, 6, 4, 7), то S < L , так как S < L . ) О п и ш е м а л г о р и т м д л я л = 5, отчего р а с с у ж д е н и я не утратят общности. В дальнейшем, для удобства, будем р а б о т а т ь не с с а м и м и э л е м е н т а м и , а с их н о м е р а м и (от 1 до л). П р и н ц и п р а б о т ы а л г о р и т м а р а з ъ я с н и м на п р и м е р е . Допустим, необходимо воспроизвести все перестановки ч и с е л 1, 2, 3 , 4, 5. П е р в о й п е р е с т а н о в к о й с ч и т а е м п е р е ­ с т а н о в к у ( 1 , 2, 3, 4, 5). П о с л е д н е й п е р е с т а н о в к о й б у д е т ( 5 , 4, 3, 2, 1). Э л е м е н т ы п е р е с т а н о в к и б у д е м х р а н и т ь в массиве. П р е д п о л о ж и м , что на н е к о т о р о м ш а г е р а б о т ы а л г о ­ р и т м а п о л у ч е н а п е р е с т а н о в к а Р: 3 3 Р = ( 3 , 4, 5, 2, 1) = ( р , , Pi, р , г р, 4 р ). 5 Д л я того ч т о б ы о п р е д е л и т ь н е п о с р е д с т в е н н о с л е д у ю ­ щ у ю з а ней п е р е с т а н о в к у , н е о б х о д и м о в ы п о л н и т ь ш а г и : Ш а г 1. Б у д е м п р о с м а т р и в а т ь д а н н у ю п е р е с т а н о в к у с п р а в а налево и следить за тем, чтобы к а ж д ы й следую­ щий элемент перестановки (элемент массива с большим н о м е р о м ) б ы л б о л ь ш е п р е д ы д у щ е г о (т. е. э л е м е н т а м а с ­ сива с меньшим номером), и остановимся сразу же, к а к т о л ь к о это п р а в и л о н а р у ш и т с я ( 1 < 2 < 5 , а 5 > 4 ) . М е с т о остановки указано подчеркиванием: (3, 4, 5, 2, 1). Ш а г 2. З а т е м в н о в ь п р о с м а т р и в а е м п р о й д е н н ы й п у т ь 237
( с п р а в а н а л е в о ) до тех п о р , п о к а не д о й д е м д о п е р в о г о ч и с л а , которое у ж е б о л ь ш е о т м е ч е н н о г о . М е с т о второй остановки отмечено двойным подчеркиванием. ( 3 , 4, 5, 2, 1). Шаг 3. Поменяем местами отмеченные числа: ( 3 , 5, 4, 2, 1). Ш а г 4. В ч а с т и м а с с и в а , р а с п о л о ж е н н о й с п р а в а от д в о й н о г о п о д ч е р к и в а н и я , о т с о р т и р у е м все ч и с л а в п о р я д ­ к е в о з р а с т а н и я . Т а к к а к д о сих п о р они б ы л и у п о р я д о ч е ­ ны по у б ы в а н и ю , то это л е г к о с д е л а т ь , з а п и с а в в о б р а т ­ ном п о р я д к е у к а з а н н у ю ч а с т ь м а с с и в а . П о л у ч и м новую п е р е с т а н о в к у , к о т о р у ю о б о з н а ч и м Q — (q q , q , q , q ): b 2 3 4 5 Q = ( 3 , 5, 1, 2, 4 ) . Это и е с т ь т а п е р е с т а н о в к а , к о т о р а я н е п о с р е д с т в е н н о следует за Я в лексикографическом порядке. П р и м е ч а н и е . Действительно, P<Q, так как р —4, q — b. Пусть существует такая перестановка R, что P<iR<.Q. Тогда р — = г, = <7,. По построению q — наименьшее число в множестве {1, 2, 4, 5} (это множество содержит элементы перестановки Q без q ), такое, что q >p . Поэтому для г верно одно из двух равенств: г = р или r — q . Но так как в Р элементы, начиная с р , убывают, то из P<R следует, что если р =г , то P = R. Аналогично, так как в Q элементы, начиная с q , возрастают, то из R<CQ следует, что если r — q , то и R = Q. Следовательно, перестановки R не существует. 2 2 х 2 x 2 2 2 2 2 2 2 3 2 2 3 2 2 В массиве Р будем хранить номера элементов. Внача­ л е в м а с с и в е х р а н я т с я ч и с л а от 1 д о п, р а с п о л р ж е н н ы е в п о р я д к е в о з р а с т а н и я т а к , что к а ж д ы й э л е м е н т р а в е н с в о е м у н о м е р у . Н у л е в о й э л е м е н т ф и к т и в н ы й , он и с п о л ь ­ зуется д л я проверки окончания работы. Генерация пере­ становок будет закончена, когда нулевой элемент станет о т л и ч н ы м от н у л я . Запишем алгоритм генерации перестановок: нц д л я i от 0 до п |p[i]:=i 238 :инициализация массива Р
кц нц пока р [0] = 0 нц для i от 1 д о п |pli]:=p[i] : вывод очередной п е р е с т а ­ н о в к и на экран кц j:=N нц пока p [ j — l ] > p [ j ] кц :поиск (справа налево) :элемента, : большего предшествую:щего ему ( Ш А Г 1) :поиск числа, (5.1) большего :отмеченного ( Ш А Г 2) k:=N нц пока p [ j — l ] > p [ k ] I k:=k-l кц d:=p[j-l] p[j-l]:=p[k] p[k]:=d нц для i от j д о n I r [ i ] : = p [ N —(1 — j ) ] :перестановка двух чисел, : найденных выше ( Ш А Г 3 ) : з а п и с ь части массива в •.обратном порядке :во вспомогательный мас­ сив г :перенос элементов из мас:сива г :в исходный массив : ( Ш А Г 4) кц нц для i от j до n |p[i]:=r[i] кц 'кц Вопросы для повторения 1. Ч т о т а к о е п е р е с т а н о в к и ? 2. Ч е м у р а в н о ч и с л о п е р е с т а н о в о к и з 4 э л е м е н т о в ? из 6 элементов? 3. Как с г е н е р и р о в а т ь все перестановки из 4 э л е м е н т о в в л е к с и ­ кографическом порядке? 4. Укажите перестановку, лексикографически с л е д у ю щ у ю за (5, 4, 6, 2, 1, 3). 239
1.2. Сочетания С о е д и н е н и я , о т л и ч а ю щ и е с я д р у г от д р у г а , по к р а й н е й м е р е , о д н и м э л е м е н т о м , к а ж д о е из к о т о р ы х с о д е р ж и т т э л е м е н т о в , в з я т ы х из п р а з л и ч н ы х э л е м е н т о в , н а з ы в а ­ ю т с я сочетаниями ( к о м б и н а ц и я м и или в ы б о р к а м и ) из п элементов по т. П о р я д о к с л е д о в а н и я э л е м е н т о в не учитывается. П р и м е р . В ы п и ш е м все с о ч е т а н и я из э л е м е н т о в а, Ь, с по д в а : ab, ас, be. Количество способов, которыми можно в ы б р а т ь т э л е м е н т о в из п, п р и н я т о о б о з н а ч а т ь С (п, т) или С™ ( ч и т а е т с я « ч и с л о с о ч е т а н и й из п по m » ) . З н а ч е н и е в е л и ­ ч и н ы С (п, т) в ы ч и с л я е т с я по ф о р м у л е С(п, т) = — . (1) т\ ( я — т ) ! (Доказательство О т м е т и м , что С(п, формулы будет /п) = — — ­ — - = С(п, приведено п — т). ниже.) (2) т\ (п — ту. П р и м е р . С к о л ь к и м и с п о с о б а м и м о ж н о из 10 чело­ век в ы б р а т ь к о м а н д у д л я и г р ы в г о р о д к и ? К о м а н д а с о с т о и т из 4 ч е л о в е к . К о л и ч е с т в о , с п о с о б о в р а в н о ч и с л у с о ч е т а н и й из 10 по 4. С (10, 4 ) = — i L 4! ( 1 0 ­ 4 ) ! ^ £ 2 ° 210. 1­2­3­4 Д л я р е ш е н и я н е к о т о р ы х з а д а ч т р е б у е т с я не т о л ь к о п о д с ч и т а т ь ч и с л о с о ч е т а н и й , но и н а й т и к а ж д о е из них. П р и в е д е м а л г о р и т м г е н е р а ц и и всех с о ч е т а н и й из п э л е ­ м е н т о в по т. Т а к ж е , к а к и в а л г о р и т м е г е н е р а ц и и п е р е с т а н о в о к , б у д е м р а б о т а т ь не с с а м и м и э л е м е н т а м и , а с их н о м е р а м и 1, 2, п. 240
Т а к к а к п о р я д о к э л е м е н т о в в с о ч е т а н и и не у ч и т ы в а ­ е т с я , то п о л у ч а т ь с о ч е т а н и я у д о б н о в п о р я д к е в о з р а с т а ­ н и я и н д е к с о в и с п о л ь з у е м ы х на д а н н о м ш а г е э л е м е н т о в ( о б щ е е их ч и с л о есть т). Т е к у щ е е с о ч е т а н и е б у д е м х р а н и т ь в м а с с и в е В. В к а ч е с т в е н а ч а л ь н о й к о н ф и г у р а ­ ции в о з ь м е м с л е д у ю щ у ю : ( 1 , 2, т), д л я к о т о р о й В [/] = / , / = 1 , т. С о ч е т а н и я б у д е м п о л у ч а т ь в в о з р а ­ с т а ю щ е м лексикографическом порядке, поэтому послед­ ним с о ч е т а н и е м б у д е т (п — т-f-1, п — т-\-2, п — 1, п). Д л я каждого элемента последнего сочетания выполня­ е т с я у с л о в и е B[j] = n — m-j-j. Д л я всех о с т а л ь н ы х соче­ т а н и й это р а в е н с т в о б у д е т н а р у ш е н о хотя бы д л я одного элемента. Д л я генерации очередного сочетания найдем элемент В [/] с м а к с и м а л ь н ы м и н д е к с о м /, т а к о й , что в ы п о л н я е т с я неравенство В [/]<« — tn + j . (*) П р и этом б у д е м п р о с м а т р и в а т ь т е к у щ е е с о ч е т а н и е с п р а в а н а л е в о . З а т е м у в е л и ч и м э т о В [/] на 1, а д л я всех k<Zj п о л а г а е м В [k] = B (k—- l ) - f - 1 . Е с л и т а к о г о В [/'] не с у щ е с т в у е т , то г е н е р а ц и я с о ч е т а н и й д л и н ы т з а к о н ч е н а . нц д л я L от I до m | B[i]:=i нц j : —100; нц п о к а j < > 0 | н ц д л я i от 1 д о m B[i]:=B[iJ кц j:=m нцпокаП>0)и(В[Л; 9 Информатика, в—9 кл. инициализация массива : в ы в о д о ч е р е д н о г о полу:ченного сочетания (5.2) = п + j —• m ) : поиск э л е м е н ­ т а , удовлетво­ р я ю щ е г о усло: в и ю (*) 241
кц е с л и j <С > О : п р о в е р к а о к о н ч а н и я генеграции сочетаний :изменение элемента, удов­ л е т в о р я ю щ е г о у с л о в и ю (*) то B[j]:=B[j]+l н ц д л я к от j + 1 | до m В [ к ] : = В [ к - 1 ] + 1 : изменение элементов, стоя­ щ и х после элемента, удов­ л е т в о р я ю щ е г о у с л о в и ю (*) кц все кц Вопросы для повторения 1. Ч т о н а з ы в а е т с я с о ч е т а н и е м и з п э л е м е н т о в п о ml 2 . Ч е м у р а в н о ч и с л о с о ч е т а н и й и з 5 по 3? и з 6 п о 2? 3. Как с г е н е р и р о в а т ь все сочетания 4. К а к о е с о ч е т а н и е б у д е т п о л у ч е н о з а (3, 5, 8), е с л и п = 8, т — Ъ1 1.3*. из 5 э л е м е н т о в алгоритмом по 2? (5.2) вслед Размещения С о е д и н е н и я , о т л и ч а ю щ и е с я д р у г от д р у г а с о с т а в о м э л е м е н т о в или их п о р я д к о м , к а ж д о е из к о т о р ы х с о д е р ­ ж и т т(т<Сп) э л е м е н т о в , в з я т ы х из п р а з л и ч н ы х э л е ­ м е н т о в , н а з ы в а ю т с я размещениями из п элементов по т. П р и м е р . В ы п и ш е м все р а з м е щ е н и я из э л е м е н т о в а, Ь, с по д в а : ab, Ьа, ас, са, be, cb. Количество способов, которыми можно в ы б р а т ь и р а з м е с т и т ь по т р а з л и ч н ы м м е с т а м тип различных э л е м е н т о в , п р и н я т о о б о з н а ч а т ь А (п, т) или Л™ ( ч и т а е т с я « ч и с л о р а з м е щ е н и й из п по m » ) . В ы ч и с л и м з н а ч е н и е в е л и ч и н ы Л " , т. е. в ы ч и с л и м , с к о л ь к и м и с п о с о б а м и м о ж ­ но в ы б р а т ь и р а з м е с т и т ь по т р а з л и ч н ы м м е с т а м т из п различных предметов. 242
Н а п е р в о е м е с т о м о ж н о п о м е с т и т ь л ю б о й из л п р е д ­ метов, на в т о р о е м е с т о — л ю б о й п р е д м е т из (га — 1) о с т а в ­ ш и х с я , на т р е т ь е — один из (л — 2 ) о с т а в ш и х с я и т. д . Н а п р е д п о с л е д н е е место с н о м е р о м ( о т — 1 ) — л ю б о й из о с т а в ш и х с я л — (т — 2) п р е д м е т о в , а на п о с л е д н е е от-е м е с т о — один из л — ( о т — 1 ) . П о л у ч а е м Л ( л , от) = л ( л — 1 ) ( л — 2 ) . . . ( л — (от — 2)){п — (от — 1)) = (п — т)\' П о о п р е д е л е н и ю , 0! = 1. П р и м е р . Сколько всего семизначных телефонных н о м е р о в , в к а ж д о м из к о т о р ы х ни о д н а ц и ф р а не п о в т о ­ ряется? Э т а з а д а ч а о в ы б о р е и р а з м е щ е н и и по с е м и р а з л и ч ­ н ы м м е с т а м с е м и из д е с я т и р а з л и ч н ы х ц и ф р , п о э т о м у число у к а з а н н ы х телефонных номеров равно А (10, 7 ) = 1 0 - 9 - 8 - 7 . 6 - 5 - 4 = 6 0 4 8 0 0 . А т е п е р ь д о к а ж е м ф о р м у л у (1) п. 1.2 д л я ч и с л а сочетаний. В ы б р а т ь от из л р а з л и ч н ы х предметов можно С ( л , от) с п о с о б а м и , и в к а ж д о м из в ы б р а н н ы х с о ч е т а н и й и м е е т с я от! в о з м о ж н о с т е й у п о р я д о ч и т ь от п р е д м е т о в э т о ­ го с о ч е т а н и я . П о э т о м у и м е е т с я от! С (л, от) в о з м о ж н о с т е й в ы б р а т ь и р а з м е с т и т ь по от р а з н ы м м е с т а м т из п р а з ­ н ы х п р е д м е т о в , т. е. Л (л, от) = от!С(л, от). О т с ю д а с л е д у е т , что ч и с л о с о ч е т а н и й из л р а з л и ч н ы х п р е д м е т о в по от в от! р а з м е н ь ш е , чем ч и с л а р а з м е щ е н и й из л по от, т. е. „ . . С (л, от) = А («, т) п\ :—- = т\ . т\(п-т)\ В том с л у ч а е , если т р е б у е т с я с г е н е р и р о в а т ь все р а з ­ м е щ е н и я из л по от, то д л я к а ж д о г о с о ч е т а н и я , п о л у ч е н ­ ного а л г о р и т м о м (5.2), п р и м е н я ю т а л г о р и т м г е н е р а ц и и п е р е с т а н о в о к (5.1). ( Э т о т а л г о р и т м р а з р а б о т а й т е с а м о ­ стоятельно.) 243
Вопросы для повторения 1. Ч т о н а з ы в а е т с я р а з м е щ е н и я м и и з п э л е м е н т о в по ml 2. Ч е м у р а в н о ч и с л о р а з м е щ е н и й и з 5 п о 3? и з 6 п о 21 3. Как с г е н е р и р о в а т ь в с е р а з м е щ е н и я и з 5 э л е м е н т о в по 21 § 2*. С О Е Д И Н Е Н И Я С ПОВТОРЕНИЯМИ 2.1. Р а з м е щ е н и я с п о в т о р е н и я м и Д о сих пор р а с с м а т р и в а л и с ь с о е д и н е н и я , в к а ж д о е из к о т о р ы х л ю б о й из п р а з л и ч н ы х э л е м е н т о в входит один раз. М о ж н о рассматривать соединения с повторениями, т. е. с о е д и н е н и я , в к а ж д о м из к о т о р ы х л ю б о й из п р а з ­ л и ч н ы х э л е м е н т о в м о ж е т в х о д и т ь б о л е е одного р а з а . Р а з м е щ е н и я из п э л е м е н т о в , в к а ж д о е из к о т о р ы х входит т э л е м е н т о в , п р и ч е м один и тот ж е э л е м е н т может повторяться в к а ж д о м размещении любое число р а з , но не б о л е е чем т, н а з ы в а ю т с я размещениями из п элементов по m с повторениями. П р и м е р . В ы п и ш е м р а з м е щ е н и я с п о в т о р е н и я м и из д в у х э л е м е н т о в а, Ь по т р и : ааа, aab, aba, abb, baa, bab, bba, bbb. К о л и ч е с т в о р а з м е щ е н и й из n э л е м е н т о в no m с повто­ р е н и я м и о б о з н а ч а ю т А™ (п). С п р а в е д л и в а ф о р м у л а А:(п) = п. м Д е й с т в и т е л ь н о , на к а ж д о е из пг мест мы м о ж е м п о м е с т и т ь л ю б о й из п э л е м е н т о в . П р и м е р . К а ж д ы й т е л е ф о н н ы й н о м е р состоит из 7 цифр. Сколько всего телефонных номеров, с о д е р ж а щ и х т о л ь к о ц и ф р ы 2, 3, 5, 7? Э т а з а д а ч а о ч и с л е р а з м е щ е н и й в семи п о з и ц и я х семи ц и ф р , к а ж д а я из к о т о р ы х м о ж е т б ы т ь 2, 3, 5 или 7. Ц и ф ­ ры в телефонном номере могут повторяться. Ч и с л о всех у к а з а н н ы х н о м е р о в есть А (4) = 4 = = 16 384. 7 7 4 244
О п и ш е м а л г о р и т м г е н е р а ц и и всех р а з м е щ е н и й из п э л е м е н т о в по т с п о в т о р е н и я м и . П р о н у м е р у е м э л е м е н т ы от 0 до ( я — 1) и в д а л ь н е й ш е м б у д е м р а б о т а т ь не с с а м и ­ ми э л е м е н т а м и , а с их н о м е р а м и . К а ж д о м у р а з м е щ е н и ю мы можем сопоставить число в я-ичной системе счисле­ н и я , с о с т о я щ е е из т ц и ф р . И н а о б о р о т , к а ж д о м у из т а к и х чисел с о о т в е т с т в у е т о д н о - е д и н с т в е н н о е р а з м е щ е ­ н и е . М и н и м а л ь н ы м из т а к и х чисел б у д е т ч и с л о , с о с т о я ­ щ е е из т н у л е й . Д л я п о л у ч е н и я всех ч и с е л , с о о т в е т с т в у ­ ю щ и х р а з м е щ е н и я м , б у д е м к а ж д ы й р а з п р и б а в л я т ь по 1 к т е к у щ е м у числу, п о к а не п о л у ч и м ч и с л о из 1 и т ну­ л е й . Д а н н о е ч и с л о не с о о т в е т с т в у е т ни одному из и с к о ­ м ы х р а з м е щ е н и й , а я в л я е т с я у к а з а т е л е м того, что гене­ р а ц и я з а к о н ч е н а ( п р е д ы д у щ и м ч и с л о м б ы л о ч и с л о , со­ с т о я щ е е из т ц и ф р , к а ж д а я из к о т о р ы х р а в н я л а с ь я — 1). Приведем фрагмент программы, генерирующей разме­ щения с повторениями. н ц д л я i от 0 д о m | A [i]: = 0 н а ч а л ь н о е ч и с л о , с о с т о я щ е е из :всех нулей кц нц п о к а А [п11 = О i:=0 А [0]: = А [ 0 ] + 1 п р и б а в л е н и е 1 к младшему :разряду нц пока ( A [ i j = n ) и ( A [ m ] = 0) A[i] = 0 A[i+1]: = A[i+1]+1 :перенос 1 в следующий :разряд i:=i+l (5.3) кц нц д л я i от т — 1 до 0 ш а г — 1 | A [ i ] : = A |i] :вывод очередного размещения с :повторениями кц кц 245
2.2. П е р е с т а н о в к и с п о в т о р е н и я м и П е р е с т а н о в к и из п п р е д м е т о в , в к а ж д у ю из кото­ рых входят п одинаковых предметов одного типа, п о д и н а к о в ы х п р е д м е т о в д р у г о г о т и п а и т. д . д о п оди­ н а к о в ы х п р е д м е т о в /г-го т и п а , г д е п -\-п -\-... -\-п — п, н а з ы в а ю т с я перестановками из п элементов с повторе­ ниями. П р и м е р . П о л у ч и м п е р е с т а н о в к и из д в у х э л е м е н т о в а и Ь, к а ж д ы й из к о т о р ы х в з я т по д в а р а з а . х 2 к х aabb, abab, abba, baab, 2 baba, к bbaa. Ч и с л о всех т а к и х п е р е с т а н о в о к с п о в т о р е н и я м и п р и ­ н я т о о б о з н а ч а т ь Р {п п, n ). О н о м о ж е т б ы т ь н а й д е ­ но по ф о р м у л е п Р (щ, п ь 2 k п, f——. Щ)= 2 (3) В о з ь м е м н е к о т о р у ю п е р е с т а н о в к у из ч и с л а Р (п п, n ) всех п е р е с т а н о в о к с п о в т о р е н и я м и . В ней все возможные перестановки элементов первого типа, считая их р а з н ы м и , м о ж н о о с у щ е с т в и т ь п \ с п о с о б а м и , з а т е м все в о з м о ж н ы е перестановки элементов второго типа, считая их р а з н ы м и , м о ж н о о с у щ е с т в и т ь п \ с п о с о б а м и и т. д., а з а т е м все в о з м о ж н ы е п е р е с т а н о в к и э л е м е н т о в &-го т и п а , с ч и т а я их р а з н ы м и , м о ж н о о с у щ е с т в и т ь n \ спосо­ б а м и . О с у щ е с т в л я я все в о з м о ж н ы е п е р е с т а н о в к и т о л ь к о э л е м е н т о в к а ж д о г о т и п а , п о л у ч и м n \n \...n \ переста­ новок, к о т о р ы е б ы в о з н и к л и из в з я т о й п е р е с т а н о в к и с п о в т о р е н и я м и , если бы и м е л а с ь в о з м о ж н о с т ь к а к - т о р а з л и ч а т ь в х о д я щ и е в к а ж д ы й тип о д и н а к о в ы е э л е м е н ­ т ы . П р о д е л а в это д л я к а ж д о й п е р е с т а н о в к и с п о в т о р е н и ­ я м и , п о л у ч и м п\ — ч и с л о в с е в о з м о ж н ы х п е р е с т а н о в о к из п различных предметов. п ь 2 k х 2 k l 2 k Т а к и м о б р а з о м , п \п \...n \ Р (п , п , п ) — п\, отку­ да следует формула д л я числа перестановок с повторе­ ниями. х 246 2 k п х 2 к
Д л я п о л у ч е н и я всех п е р е с т а н о в о к с п о в т о р е н и я м и м о ж н о в о с п о л ь з о в а т ь с я а л г о р и т м о м (5.1), з а м е н и в в н е м з н а к и > на > = . ( П о ч е м у ? ) 2.3. С о ч е т а н и я с п о в т о р е н и я м и Сочетаниями из п элементов по m с повторениями называются соединения, с о д е р ж а щ и е m элементов (без учета п о р я д к а следования), причем любой элемент мо­ ж е т в х о д и т ь в с о е д и н е н и е н е к о т о р о е ч и с л о р а з , не б о л ь ­ шее т . П р и м е р . П о л у ч и м с о ч е т а н и я из э л е м е н т о в a, b по три с повторениями: ааа, aab, abb, bbb. Ч и с л о всех с о ч е т а н и й из п э л е м е н т о в по m с п о в т о р е ­ н и я м и п р и н я т о о б о з н а ч а т ь С" (п). О н о м о ж е т б ы т ь н а й ­ д е н о по ф о р м у л е : C?(«)= ( , ", ""\i'=Cg / ш\(п— 1)! + B _,. (4) Д л я д о к а з а т е л ь с т в а этой ф о р м у л ы з а к о д и р у е м к а ж ­ дое сочетание с повторением с помощью нулей и единиц. С н а ч а л а напишем столько единиц, сколько взято эле­ ментов первого типа. Потом, чтобы отделить элементы п е р в о г о т и п а от э л е м е н т о в в т о р о г о т и п а , з а п и ш е м н у л ь , а з а т е м — столько единиц, сколько взято элементов вто­ р о г о т и п а . Д а л е е с н о в а н а п и ш е м н у л ь ( е с л и не б ы л о в з я т о ни о д н о г о э л е м е н т а в т о р о г о т и п а , но в з а п и с и появятся два следующих друг за другом нуля). Д а ­ лее напишем столько единиц, сколько взято элементов т р е т ь е г о т и п а , с н о в а н а п и ш е м н у л ь и т. д., п о к а не б у д у т в ы п и с а н ы е д и н и ц ы , с о о т в е т с т в у ю щ и е э л е м е н т а м л-го типа. Д л я с о ч е т а н и я ааа из п р и в е д е н н о г о в ы ш е п р и м е р а з а п и с ь б у д е т 1110, а д л я abb— 1011. Т а к и м о б р а з о м , ч и с л о р а з л и ч н ы х с о ч е т а н и й из п э л е 247
м е н т о в по т с п о в т о р е н и я м и р а в н о числу п е р е с т а н о в о к с п о в т о р е н и я м и , к о т о р ы е м о ж н о с о с т а в и т ь из т е д и н и ц и (п—1) нулей. Д л я вычисления количества перестано­ вок с п о в т о р е н и я м и п р и м е н и м ф о р м у л у (3). О б щ е е коли­ чество нулей и единиц равно Р -Лт, п+Я п - \ ) = { т т\ + -^=С:'(п). п (я — 1)! Пример. В кондитерском магазине продавались четыре сорта пирожных. Сколькими способами можно купить семь пирожных? Э т а з а д а ч а о ч и с л е с о ч е т а н и й из 4 э л е м е н т о в по 7 с повторениями: С1(я) = т ^ = 1 2 0 . Д о к а з а т е л ь с т в о ф о р м у л ы (4) д а е т а л г о р и т м г е н е р а ­ ции всех с о ч е т а н и й из п э л е м е н т о в по т с п о в т о р е н и я м и . Д л я э т о г о п р и м е н и м а л г о р и т м (5.2) д л я г е н е р а ц и и соче­ т а н и й из т-\-п— 1 э л е м е н т а по п— 1 (или по т, что одно и то ж е , см. ф о р м у л у (2)). В м а с с и в е В ( с м . а л г о р и т м (5.2)) х р а н я т с я в п о р я д к е в о з р а с т а н и я и н д е к с ы и с п о л ь з у е м ы х на д а н н о м ш а г е элементов. Количество таких индексов в случае генера­ ции с о ч е т а н и й из (т-\-п—1) э л е м е н т а по (п—1) есть (п—1). К а ж д ы й из и н д е к с о в п о к а з ы в а е т п о з и ц и ю н у л я в п е р е с т а н о в к е с п о в т о р е н и я м и , с о с т а в л е н н о й из т еди­ н и ц и (п—1)нулей. К о л и ч е с т в о е д и н и ц м е ж д у соседни­ ми н у л я м и ( а т а к ж е к о л и ч е с т в о е д и н и ц до п е р в о г о н у л я и после последнего) дает количество элементов каждого типа. П р и м е р . П у с т ь на к а к о м - т о ш а г е г е н е р а ц и и д л я я = 4, т — Ь(т-\-п— 1 = 8 , п— 1 = 3 ) в м а с с и в е В получен с л е д у ю щ и й н а б о р и н д е к с о в : 1, 3, 6. Э т о т н а б о р д а е т к о н ф и г у р а ц и ю 0 1 0 1 1 0 1 1 , т. е. э л е м е н т п е р в о г о т и п а в д а н н у ю в ы б о р к у не входит, э л е м е н т в т о р о г о т и п а входит 1 р а з , э л е м е н т т р е т ь е г о т и п а — 2 р а з а , э л е м е н т четвертого типа — 2 раза. 248
Д л я г е н е р а ц и и с о ч е т а н и й с п о в т о р е н и я м и м о ж н о вос­ пользоваться и алгоритмом генерации перестановок с повторениями. § 3*. ПОДМНОЖЕСТВА П у с т ь и м е е т с я некий н а б о р из п р а з л и ч н ы х э л е ­ ментов, о б л а д а ю щ и х н е к о т о р ы м о б щ и м с в о й с т в о м . Сово­ к у п н о с т ь этих э л е м е н т о в н а з ы в а ю т множеством. Общее свойство элементов множества обычно содержится в са­ мом н а з в а н и и ( з а д а н и и ) к а ж д о г о м н о ж е с т в а . М н о ж е с т в а обычно обозначают заглавными латинскими буквами. П р и м е р ы множеств: множество цифр, множество б у к в н е к о т о р о г о а л ф а в и т а , м н о ж е с т в о точек п л о с к о с т и , м н о ж е с т в о з в е з д во В с е л е н н о й . Если к а ж д ы й элемент множества А является эле­ ментом м н о ж е с т в а В, то м н о ж е с т в о А н а з ы в а е т с я под­ множеством м н о ж е с т в а В. Л ю б а я с о в о к у п н о с т ь э л е м е н ­ т о в из д а н н о г о м н о ж е с т в а о б р а з у е т п о д м н о ж е с т в о д а н н о ­ го м н о ж е с т в а . П о д м н о ж е с т в о , не с о д е р ж а щ е е ни одного э л е м е н т а , н а з ы в а ю т пустым. П у с т о е м н о ж е с т в о я в л я е т с я п о д м н о ­ жеством всякого множества. Примеры. 1 ) М н о ж е с т в о всех п о л о ж и т е л ь н ы х четных чисел я в ­ л я е т с я п о д м н о ж е с т в о м м н о ж е с т в а всех н а т у р а л ь н ы х чисел. 2) В ы п и ш е м все п о д м н о ж е с т в а м н о ж е с т в а , с о с т о я щ е ­ го из э л е м е н т о в а, Ь, с. К а ж д о е п о д м н о ж е с т в о б у д е м з а к л ю ч а т ь в фигурные скобки (пустое подмножество о б о з н а ч а ю т {}). {}, {а}, {Ь}, {с}, {а, Ь}, {а, с}, {Ь, с}, {a, h, с). К о л и ч е с т в о всех п о д м н о ж е с т в « - э л е м е н т н о г о м н о ж е ­ с т в а р а в н о 2 " ( 2 = 8). П у с т ь з а д а н о м н о ж е с т в о из п э л е м е н т о в . П р о н у м е р у ­ ем э л е м е н т ы д а н н о г о м н о ж е с т в а от 0 до (п — 1). В д а л ь ­ н е й ш е м б у д е м р а б о т а т ь не с с а м и м и э л е м е н т а м и , а с их номерами. 3 249
Д л я генерации подмножеств создадим массив В[0..п\ из ( n - f - l ) э л е м е н т а ( я - й э л е м е н т ф и к т и в н ы й и и с п о л ь з у ­ е т с я д л я о п р е д е л е н и я о к о н ч а н и я р а б о т ы ) . B[i] = 0, если i-й э л е м е н т в п о д м н о ж е с т в о не входит, и B[i]=l, если входит. Т а к и м о б р а з о м , п у с т о м у п о д м н о ж е с т в у б у д е т с о о т в е т с т в о в а т ь н а б о р из я н у л е й , а я - э л е м е н т н о м у под­ м н о ж е с т в у — н а б о р из я е д и н и ц . Тут я в н о з а м е т н а с в я з ь представления подмножества с двоичным представлени­ ем числа. Б у д е м г е н е р и р о в а т ь ч и с л а от 0 д о 2 " — 1, н а х о д и т ь их д в о и ч н о е п р е д с т а в л е н и е и ф о р м и р о в а т ь п о д м н о ж е с т в о из э л е м е н т о в исходного м н о ж е с т в а с и н д е к с а м и , соответст­ вующими единицам в этом представлении. В н а ч а л е о п р е д е л и м В [/'] ---- 0 д л я всех i от 0 д о я , что с о о т в е т с т в у е т пустому п о д м н о ж е с т в у . Б у д е м р а с с м а т р и ­ в а т ь м а с с и в В к а к з а п и с ь д в о и ч н о г о ч и с л а В [п]... В [0] и м о д е л и р о в а т ь о п е р а ц и ю с л о ж е н и я этого ч и с л а с е д и н и ­ цей. П р и с л о ж е н и и б у д е м п р о с м а т р и в а т ь ч и с л о с п р а в а н а л е в о , з а м е н я я е д и н и ц ы н у л я м и до тех п о р , п о к а не н а й д е м н у л ь , в к о т о р ы й з а н е с е м 1. Г е н е р а ц и я п о д м н о ­ ж е с т в з а к а н ч и в а е т с я , к а к т о л ь к о В[п]=1 (предыдущая к о н ф и г у р а ц и я б ы л а 1... 1 = 2 " — 1 ) . 2 П р и в е д е м ф р а г м е н т п р о г р а м м ы г е н е р а ц и и всех под­ множеств: нц п о к а В [п] = 0 i:=0 нц пока В [ i ] = l B[i]:=0 i: = i + l кц B[i]: = l н ц д л я i от 0 до n — 1 | B[i]:=B[i] кц кц 250 (5.4)
§ 4. Р Е А Л И З А Ц И Я П Е Р Е Б О Р А В А Р И А Н Т О В . СОКРАЩЕНИЕ ПЕРЕБОРА Часто встречаются задачи такого рода, когда трудно н а й т и р е ш е н и е , о т л и ч н о е от п о л н о г о п е р е б о р а всех в о з ­ можных вариантов. Алгоритмы, рассмотренные выше, позволяют органи­ зовать основные типы перебора. Примеры переборных задач. 1. П о л у ч и т ь все с п о с о б ы р а с с т а н о в к и ш е с т и к н и г р а з н ы х авторов. Д л я решения задачи применяется алгоритм генера­ ции всех п е р е с т а н о в о к из ш е с т и э л е м е н т о в . 2. Д л я у ч а с т и я в к о н к у р с е т р е б у е т с я в ы б р а т ь т р е х ч е л о ­ в е к из к л а с с а в 20 ч е л о в е к . Д л я решения задачи используется алгоритм генера­ ции всех с о ч е т а н и й из 20 э л е м е н т о в по 3. 3. П о л у ч и т ь все ч е т ы р е х з н а ч н ы е ч и с л а , у к о т о р ы х все цифры нечетные. Д л я решения задачи применяется алгоритм генера­ ции всех р а з м е щ е н и й из пяти э л е м е н т о в по ч е т ы р е с повторениями. 4. И з семи к р а с н ы х и восьми б е л ы х роз т р е б у е т с я с о с т а ­ в и т ь б у к е т из пяти р о з . П е р е ч и с л и т е все в о з м о ж н ы е варианты. Д л я решения задачи применяется алгоритм генера­ ции всех с о ч е т а н и й из д в у х по п я т ь с п о в т о р е н и я м и . К о л и ч е с т в о р а с с м а т р и в а е м ы х в а р и а н т о в при п е р е б о ­ р е м о ж е т б ы т ь очень б о л ь ш и м , что в л е ч е т з а собой большие временные з а т р а т ы . В некоторых случаях коли­ чество р а с с м а т р и в а е м ы х в а р и а н т о в у д а е т с я с о к р а т и т ь , используя определенные свойства задачи. К сожалению, не с у щ е с т в у е т о б щ и х р е к о м е н д а ц и й к а к это с д е л а т ь . В к а ж д о й к о н к р е т н о й з а д а ч е п р и х о д и т с я и с к а т ь свой способ. П р о и л л ю с т р и р у е м с о к р а щ е н и е п е р е б о р а на следующих задач: примере 251
З а д а ч а 1. Часы В матрице размера 3 X 3 расположены 9 циферблатов с з а д а н н ы м п о л о ж е н и е м с т р е л о к ( р и с . 31). Т р е б у е т с я у с т а н о в и т ь на всех ц и ф е р б л а т а х в р е м я 12 ч а с о в . Возможно 9 различных способов изменения стрелок на ц и ф е р б л а т а х . К а ж д ы й т а к о й с п о с о б з а д а е т с я н а б о ­ ром ц и ф е р б л а т о в ( р и с . 32), с т р е л к и к о т о р ы х п о в о р а ч и в а ­ ю т с я на 90° по ч а с о в о й с т р е л к е . Н а р и с у н к е д л я к а ж д о г о из с п о с о б о в с о о т в е т с т в у ю щ и е ц и ф е р б л а т ы в ы д е л е н ы се­ рым цветом, к а ж д ы й способ определяется номером — ч и с л о м от 1 до 9. П е р е в о д с т р е л о к из н а ч а л ь н о г о с о с т о я н и я в конечное п р о и з в о д и т с я п о с л е д о в а т е л ь н о с т ь ю ш а г о в . З а один ш а г м о ж н о о с у щ е с т в и т ь п е р е в о д с т р е л о к на ц и ф е р б л а т а х о д н и м из у к а з а н н ы х с п о с о б о в . Необходимо найти кратчайшую последовательность ш а г о в , п е р е в о д я щ у ю с т р е л к и всех ц и ф е р б л а т о в из н а ­ ч а л ь н о й п о з и ц и и в п о з и ц и ю 12 ч а с о в . П о л о ж е н и е с т р е л ­ ки на ц и ф е р б л а т е з а д а е т с я ч и с л о м от 0 д о 3: 0 — 12 ч, 1 — 3 ч, 2 — 6 ч, 3 — 9 ч. Д л я р е ш е н и я з а д а ч и п р о н у м е ­ р у е м ц и ф е р б л а т ы ч и с л а м и от 1 д о 9, н а ч и н а я н у м е р а ц и ю с в е р х н е г о л е в о г о у г л а и п р о в о д я ее по с т р о к а м с л е в а н а п р а в о . П р е д п о л о ж и м , что т р е б у е м а я п о с л е д о в а т е л ь ­ ность ш а г о в н а й д е н а . П о к а ж е м , что м о ж н о о г р а н и ч и т ь с я р а с с м о т р е н и е м т о л ь к о т а к и х п о с л е д о в а т е л ь н о с т е й , у ко­ торых группа одинаковых преобразований выполняется последовательно друг за другом. Действительно, два V ООО ООО ООО Рис. 31 252 4 5 1 J 3 Рис. 32 6
соседних п р е о б р а з о в а н и я в п о с л е д о в а т е л ь н о с т и м о ж н о п о м е н я т ь м е с т а м и , при этом о к о н ч а т е л ь н ы й р е з у л ь т а т п р и п о с л е д о в а т е л ь н о м в ы п о л н е н и и п р е о б р а з о в а н и й не и з м е н и т с я . П р и этом к о л и ч е с т в о о д и н а к о в ы х п р е о б р а з о ­ ваний в оптимальной (наиболее короткой) последова­ т е л ь н о с т и не п р е в о с х о д и т 3, т а к к а к п о с л е д о в а т е л ь н о е п р и м е н е н и е 4 о д и н а к о в ы х п р е о б р а з о в а н и й п е р е в о д и т ци­ ф е р б л а т ы в исходное с о с т о я н и е . Т а к и м о б р а з о м , если р а с с м о т р е т ь все в о з м о ж н ы е допустимые минимальные последовательности преобра­ з о в а н и й , в к о т о р ы х к а ж д о е из п р е о б р а з о в а н и й м о ж е т в ы п о л н я т ь с я от 0 до 3 р а з (т. е. р а с с м о т р е т ь все в о з м о ж ­ ные 9-разрядные числа в четверичной системе счисле­ ния, когда к а ж д ы й р а з р я д о т р а ж а е т количество выпол­ нений с о о т в е т с т в у ю щ е г о п р е о б р а з о в а н и я ) , то м о ж н о н а й ­ ти с р е д и них р е ш е н и е п о с т а в л е н н о й з а д а ч и . Это со­ о т в е т с т в у е т г е н е р а ц и и всех р а з м е щ е н и й из 4 э л е м е н т о в по 9 с п о в т о р е н и я м и . Ч и с л о т а к и х п о с л е д о в а т е л ь н о с т е й равно 4 . Однако можно существенно сократить количество р а с с м а т р и в а е м ы х п о с л е д о в а т е л ь н о с т е й , если п р о а н а л и ­ з и р о в а т ь в л и я н и е к а ж д о г о из п р е о б р а з о в а н и й на к о н к ­ ретный циферблат. В следующей таблице приведены м н о ж е с т в а п р е о б р а з о в а н и й , в л и я ю щ и х на к а ж д ы й из циферблатов. 9 Номер ци­ ферблата со 1 2 4 5 6 7 со 9 Номера преобразова­ ний, влияющих на ци­ ферблат 1, 1, 2, 1, 1, 3, 4, 5, 6, 2, 2, 3, 4, 3, 5, 7, 7, 8, 4 3, 6 5, 5, 6, 8 8, 9 5 7 7, 9 9 9 253
И т а к , на ц и ф е р б л а т 1 в л и я ю т п р е о б р а з о в а н и я I, 2 и 4. П о п ы т а е м с я у с т а н о в и т ь его в конечное п о л о ж е н и е , в ы п о л н я я п о с л е д о в а т е л ь н о все в о з м о ж н ы е к о м б и н а ц и и п р е о б р а з о в а н и й 1, 2 и 4. П р и этом л ю б о й п р о и з в о л ь н ы й н а б о р к о м б и н а ц и й п р е о б р а з о в а н и й 1 и 2 (в к о л и ч е с т в е а, и а , соответственно) однозначно определяет количество преобразований, которое необходимо для установления ц и ф е р б л а т а 1 в конечное п о л о ж е н и е . Т а к и м о б р а з о м , а ф и к с и р о в а н о д л я з а д а н н ы х з н а ч е н и й а и а . И з второй с т р о ч к и т а б л и ц ы в и д н о , что т е п е р ь д о с т а т о ч н о р а с с м о т ­ реть только всевозможные значения а (при уже фикси­ р о в а н н ы х з н а ч е н и я х а и а ) , при этом з н а ч е н и е а б у д е т ф и к с и р о в а н о . И з с т р о ч к и 3 с л е д у е т , что а ф и к с и р о в а н о , из с т р о ч к и 4 — что ф и к с и р о в а н о а , из с т р о ч к и 5 — а , из строчки 7 — а . 2 4 { 2 3 { 2 5 6 7 9 8 Т а к и м о б р а з о м , д о с т а т о ч н о о с у щ е с т в и т ь п е р е б о р по возможным значениям а а и с , в ы ч и с л я я п р и этом значения с , а , а , а , а . П р и этом полученная последо­ вательность д о л ж н а переводить ц и ф е р б л а т ы в конечное состояние. И т а к , н а м д о с т а т о ч н о п е р е б р а т ь 4 к о м б и н а ц и й , что з н а ч и т е л ь н о м е н ь ш е , чем 4 . ь 3 5 т 9 2 4 8 3 9 З а д а ч а 2. Р а з д е л наследства Б а р о н е с с а фон Б и р л и н г х о ф е н о с т а в и л а п о с л е с е б я двум дочерям л а р е ц с золотыми монетами. Ее завеща­ ние г л а с и л о , что все з о л о т о п о л у ч и т с о с е д н и й м о н а с т ы р ь , е с л и д о ч е р я м не у д а с т с я р а з д е л и т ь с о д е р ж и м о е л а р ц а на д в е р а в н ы е ч а с т и . Д о с т о и н с т в о к а ж д о й з о л о т о й моне­ ты является целым числом. П р и м е р . Если монеты в л а р ц е были достоинством 2, 10, 4, 3, 7, 4, то их м о ж н о р а з д е л и т ь м е ж д у н а с л е д н и ­ ц а м и с л е д у ю щ и м о б р а з о м : 10, 3, 2 и 7, 4, 4. Е с л и ж е з о л о т ы е м о н е т ы б ы л и д о с т о и н с т в о м 1, 9, 7, 3, 8, то р а з д е л н а с л е д с т в а н е в о з м о ж е н , и оно д о с т а н е т с я м о н а с т ы р ю . П р о г р а м м а д о л ж н а вводить количество монет и их достоинства а а , a . Результатом работы програми 254 2 N
мы д о л ж н о быть сообщение: «раздел наследства невоз­ м о ж е н » или « р а з д е л н а с л е д с т в а в о з м о ж е н » . В п о с л е д н е м случае необходимо указать, монеты какого достоинства п о л у ч и т к а ж д а я из н а с л е д н и ц . О б о з н а ч и м с у м м у н о м и н а л о в всех монет ч е р е з 5 . Э т о число д о л ж н о быть четным, иначе раздел невозможен. Д л я решения данной задачи можно, например, при­ м е н и т ь а л г о р и т м (5.4) д л я г е н е р а ц и и всех п о д м н о ж е с т в м н о ж е с т в а монет и п о и с к а с р е д и э т и х п о д м н о ж е с т в такого, стоимость которого р а в н а 5 / 2 . П о д стоимостью подмножества будем понимать суммарную стоимость н о м и н а л о в монет, в х о д я щ и х в д а н н о е п о д м н о ж е с т в о . Количество подмножеств равно, как у ж е отмечалось, 2 . Попытаемся сократить количество рассматриваемых п о д м н о ж е с т в , исходя из с л е д у ю щ и х с о о б р а ж е н и й : 1) Н и о д н а из н а с л е д н и ц не м о ж е т п о л у ч и т ь б о л е е п о л о в и н ы н а с л е д с т в а . П о э т о м у н а с не и н т е р е с у ю т п о д ­ м н о ж е с т в а с т о и м о с т ь ю б о л е е чем S / 2 . 2) Е с л и у ж е с г е н е р и р о в а н о н е к о т о р о е п о д м н о ж е с т в о А со с т о и м о с т ь ю б о л ь ш е S / 2 , то д о б а в л е н и е л ю б ы х э л е м е н т о в к э т о м у п о д м н о ж е с т в у не с м о ж е т п р и в е с т и к р е ш е н и ю и, с л е д о в а т е л ь н о , г е н е р и р о в а т ь их не и м е е т смысла. 3) М а к с и м а л ь н а я по н о м и н а л ь н о й с т о и м о с т и м о н е т а ( п у с т ь это м о н е т а а , ) д о л ж н а п о п а с т ь к одной из н а с л е д ­ н и ц , п о э т о м у р а з д е л н а с л е д с т в а н а ч н е м с этой м о н е т ы . И з - з а того, что с т о и м о с т ь в ы б р а н н о й м о н е т ы м а к с и м а л ь ­ на, р а з н о с т ь м е ж д у S / 2 и с т о и м о с т ь ю этой м о н е т ы м и н и м а л ь н а , что, в о з м о ж н о , п р и в е д е т к у м е н ь ш е н и ю к о л и ч е с т в а р а с с м а т р и в а е м ы х в а р и а н т о в . С этой ж е ц е л ь ю о т с о р т и р у е м м о н е т ы в п о р я д к е н е в о з р а с т а н и я их номиналов. W 4) вине 5) вины Е с л и о д н а из монет и м е е т н о м и н а л , р а в н ы й п о л о ­ и с к о м о й с у м м ы , то р а з б и е н и е н а й д е н о . Если хоть одна монета имеет номинал более поло­ и с к о м о й с у м м ы , то р а з б и е н и е н е в о з м о ж н о . 255
П у н к т ы 4 и 5 д о с т а т о ч н о п р о в е р и т ь т о л ь к о д л я моне­ ты с м а к с и м а л ь н ы м н о м и н а л о м . В массиве А будем хранить номиналы монет. В мас­ с и в е st в я ч е й к а х с и н д е к с а м и от 1 до st[0] х р а н я т с я н о м е р а в ы б р а н н ы х с е й ч а с монет ( в о т с о р т и р о в а н н о м массиве). Монеты с этими номерами образуют подмно­ ж е с т в о с т о и м о с т и s. В м а с с и в е rez п о м е с т и м т е м о н е т ы , к о т о р ы е п о л у ч и т о д н а из н а с л е д н и ц , т о г д а д р у г а я полу­ чит о с т а в ш и е с я м о н е т ы . Эти р а с с у ж д е н и я я в л я ю т с я основой с л е д у ю щ е г о а л г о ­ ритма: summa: = 0 д л я i от 1 до п нц | s u m m a : = s u m m a - f a [i] кц o t v e t : = « H e T решения» если mod ( s u m m a , 2 ) = 0 то s u m m a : = div ( s u m m a , 2 ) д л я i от 1 до n — 1 д л я j от i + 1 До n е с л и a [ i ] < a [j] то k:=a[i] a[i]:=a[j] a[j]:=k все кц кц st [0]: = 1 st I I ] : = 1 s:=a[l] i:=st[l]+l 256 :находим стоимость наследства :сортировка «пузырьком» :массива :с исходными д а н н ы м и :в порядке убывания : к о л и ч е с т в о в ы б р а н н ы х с е й ч а с монет :индекс монеты с максимальным :номиналом : н о м е р о ч е р е д н о й д о б а в л я е м о й мо: неты
если a [ l ] > s u m m a то o t v e t : = « H e T решения» st[l]: = 0 ' . п о л а г а е м s t [ l ] = 0 , чтобы п р о п у с т и т ь :цикл «пока» все если а [1] = s u m m a то otvet:=«ecTb решение» (5.5) rez[l]: = a[l] все пока ( s t [ l ] = l ) и (otvet = «HeT р е ш е н и я » ) нц пока ( i < = n ) и ( o t v e t = « H e T р е ш е н и я » ) нц s : = s + a[i] : п ы т а е м с я добавить монету к гсумме если s = s u m m a то otvet: = «ecTb решение» x : = s t [0] д л я j от 1 до х : найденное решение нц :сохраняем в массиве | r e z [ j ] : = a [st [j]] :rez кц r e z [ х + 1]: = a [i] иначе если s<Csumma то : д о б а в л я е м очередную монету к :уже выбранным s t [ 0 ] : = st[0]-f- 1 у в е л и ч и в а е м количество : в ы б р а н н ы х монет х : = s t [0] st[х]: = i :индекс выбранной монеты заносим в массив иначе : м о н е т а не п о д х о д и т s : = s — a [i] :превышена summa 257
все i : = i-f-l .'переходим к с л е д у ю щ е й м о н е т е все кц : е с л и р е ш е н и е не н а й д е н о , то в о з в р а щ а е м с я на :шаг назад, :т. е. в ы б р а с ы в а е м последнюю д о б а в л е н н у ю монету x:=st[0] :удаление последней i : = st [х] -f 1 :добавленной s : = s — a [st [х]] : м о н е т ы из в ы б р а н н ы х st [ 0 ] : = х - 1 кц все Р а с с м о т р и м р а б о т у д а н н о г о а л г о р и т м а на п р и в е д е н ­ ном в ы ш е п р и м е р е . П о с л е с о р т и р о в к и м а с с и в а и м е е м : а = (10, 7, 4, 4, 3, 2); summa= 15; s=10; st = (l, 1, 0, 0, 0, 0, 0). Выпишем значения переменных при к а ж д о м прохож­ дении цикла П О К А . Значение переменной i Массив st Значение переменной s 2 s=10 + a[2]=17>15; s = s — a [ 2 ] = 10; s< = ( l , 1, 0, 0, 0, 0, 0) 3 s = 10 + a [ 3 ] = 1 4 < 1 5 ; st=(2, 4 s=14 + a[4]=18>15; s = s — a [ 4 ] = 14; st = (2, 1, 3, 0, 0, 0, 0) 5 s=14 + a[5]=17>15; s = s — a [ 5 ] = 14; st = (2, 1, 3, 0, 0, 0, 0) 6 s = 14 + a [ 6 ] = 1 6 > 1 5 ; s = s —a [ 6 ] = 14; s = s —a [ 3 ] = 10; st = (l, 1, 3, 0, 0, 0, 0 ) ' 1, 3, 0, 0, 0, 0) Элемент s<[2] = 3, хоть и присутствует в массиве, но в дальнейшем рассмотрении не участвует, так как количество элементов равно sf [ 0 ] = 1 . 1 258
Значение пе­ ременной i Значение переменной s 4 s=10 + 5 a[4]=14<15; Массив st sf=(2, 1, 4, 0, 0, 0, 0) s=14 + a[5]=17>15; s = s — a[5]=14; st=(2, 1, 4, 0, 0, 0, 0) 6 s=14 + a[6]=16>15; s = s — a [6] = 1 4 ; s = s — a [ 4 ] = 10; s r = ( l , 1, 4, 0, 0, 0, 0) 5 s = 10 + st = (2, 1, 5, 0, 0, 0, 0) 6 s = 1 3 + a[6]=15; a[5]=13<15; г е я = (10, 3, 2). Метод, использованный для решения данной задачи, н а з ы в а е т с я перебором с возвратом или бектрекингом (Backtracking ). Н е к о т о р ы е з а д а ч и , я в л я ю щ и е с я на п е р в ы й в з г л я д переборными, могут быть решены другими методами. З а д а ч а 3. «Счастливые» билеты Составить алгоритм определения количества шести­ значных «счастливых» трамвайных билетов, у которых с у м м а п е р в ы х т р е х ц и ф р с о в п а д а е т с с у м м о й т р е х по­ следних. Эта з а д а ч а р а с с м а т р и в а л а с ь среди з а д а ч повы­ шенной с л о ж н о с т и г л а в ы « Р е к у р р е н т н ы е у р а в н е н и я и д и ­ н а м и ч е с к о е п р о г р а м м и р о в а н и е » ( з а д а ч а 1). М е т о д ее р е ш е н и я не я в л я е т с я п е р е б о р н ы м , хотя, на п е р в ы й в з г л я д , э т а з а д а ч а с в о д и т с я к г е н е р а ц и и всех с о ч е т а н и й из 10 по 6 с п о в т о р е н и я м и . Е с л и бы в з а д а ч е т р е б о в а л о с ь не т о л ь к о п о д с ч и т а т ь к о л и ч е с т в о « с ч а с т л и в ы х » б и л е т о в , но и в ы д а т ь н о м е р а э т и х б и л е т о в , то в э т о м с л у ч а е н е о б х о д и м о б ы л о б ы использовать только переборный метод. Н а п р и м е р е этой з а д а ч и в и д н а р а з н и ц а м е ж д у п о д ­ счетом количества вариантов, удовлетворяющих условию з а д а ч и , и генерацией этих в а р и а н т о в . 259
ЗАДАЧИ ДЛЯ ПОВТОРЕНИЯ 1. С к о л ь к и м и с п о с о б а м и м о ж н о р а с к р а с и т ь в е р ш и н ы к у б а в т р и ц в е т а ( н а п р и м е р , к р а с н ы й , синий и з е л е н ы й ) ? Н а п е ч а т а т ь все в о з м о ж н ы е с п о с о б ы . 2. Сколькими различными способами можно надеть на н и т ь с е м ь б у с и н д в у х ц в е т о в — с и н е г о и белого? Н а п е ч а т а т ь все в о з м о ж н ы е в а р и а н т ы . 3. С к о л ь к о р а з л и ч н ы х о ж е р е л и й из с е м и б у с и н м о ж ­ но с о с т а в и т ь из бусин д в у х ц в е т о в — синего и белого? ( П о д о ж е р е л ь е м п о н и м а е т с я з а м к н у т а я нить с н а н и ­ з а н н ы м и б у с и н а м и . ) Н а п е ч а т а т ь все в о з м о ж н ы е в а р и ­ анты. 4. С к о л ь к о р а з л и ч н ы х о ж е р е л и й м о ж н о с о с т а в и т ь из д в у х б е л ы х , д в у х синих и д в у х к р а с н ы х б у с и н ? Н а п е ч а ­ т а т ь все в о з м о ж н ы е в а р и а н т ы . 5. Сколькими различными способами можно грани к у б а р а с к р а с и т ь в ч е т ы р е ц в е т а ? Н а п е ч а т а т ь все в о з ­ можные варианты. 6. Г р а н и к у б а м о ж н о р а с к р а с и т ь : а ) все в б е л ы й цвет; б ) все в ч е р н ы й цвет; в) ч а с т ь в б е л ы й , а о с т а л ь н ы е в черный. Сколько имеется р а з л и ч н ы х способов раскра­ ски? Н а п е ч а т а т ь все в о з м о ж н ы е в а р и а н т ы . 7. Н а п е ч а т а т ь все ч е т ы р е х з н а ч н ы е д е с я т и ч н ы е ч и с л а , у к о т о р ы х все ц и ф р ы р а з н ы е . О б о б щ и т ь на Af-значные числа. 8. Д а м а с о б и р а е т с я п р и г л а с и т ь с е м е р ы х своих д р у ­ зей на н е с к о л ь к о з в а н ы х о б е д о в . Е е с т о л , о д н а к о , неве­ л и к , д а и о б е д «в у з к о м к р у г у » н е с о м н е н н о г о р а з д о п р и я т н е е . П о э т о м у она р е ш а е т п р и г л а ш а т ь к а ж д ы й р а з л и ш ь т р о и х гостей. К р о м е того, ей х о ч е т с я , ч т о б ы к а ж ­ д ы е д в о е ее д р у з е й н е п р е м е н н о в с т р е т и л и с ь з а ее с т о л о м , п р и ч е м о н а п р е д п о ч л а б ы , ч т о б ы они в с т р е т и л и с ь л и ш ь о д н а ж д ы . К а к х о з я й к е р а с п р е д е л и т ь п р и г л а ш е н и я по дням? 9. Н а п и с а т ь а л г о р и т м в ы п л а т ы з а д а н н о й с у м м ы д е ­ нег в с е м и в о з м о ж н ы м и с п о с о б а м и . В н а л и ч и и и м е ю т с я 260
к у п ю р ы д о с т о и н с т в о м 1, 2, 5, 10, 2 0 и 100 д о л л а р о в . К о л и ч е с т в о к у п ю р к а ж д о г о в и д а не о г р а н и ч е н о . 10. Н а п и с а т ь п р о г р а м м у , к о т о р а я из б у к в А, В и С п о с т р о и т с л о в о д л и н ы JV, в к о т о р о м д в а л ю б ы х с т о я щ и х рядом подслова различны. Например: с л о в о АВСАВА составлено правильно; с л о в о САВАВС с о с т а в л е н о н е п р а в и л ь н о , т а к к а к со­ ч е т а н и я б у к в АВ стоят р я д о м . 11. С у щ е с т в у ю т ч и с л а , о б л а д а ю щ и е с в о й с т в а м и : ч и с л о д е л и т с я на все свои ц и ф р ы ; ч и с л о , п о л у ч е н н о е из д а н н о г о з а п и с ь ю ц и ф р в о б ­ р а т н о м п о р я д к е , т о ж е д е л и т с я на все свои ц и ф р ы . П р и м е р о м т а к о г о ч и с л а я в л я е т с я 216. С о с т а в и т ь п р о ­ г р а м м у д л я п е ч а т и всех т р е х з н а ч н ы х ч и с е л , о б л а д а ю щ и х э т и м и с в о й с т в а м и . Ч и с л а с о д и н а к о в ы м и п е р в о й и по­ с л е д н е й ц и ф р о й не п е ч а т а т ь . 12. С о с т а в и т ь а л г о р и т м п о л у ч е н и я с л о в а р я п л е м е н и т у м б а - ю м б а , е с л и и з в е с т н о , что: а л ф а в и т я з ы к а этого п л е м е н и с о д е р ж и т 4 б у к в ы — а, Ь, с, d\ с л о в а на я з ы к е этого п л е м е н и не с о д е р ж а т д в у х и более одинаковых букв подряд. 13. К л е т ч а т о е п о л е пХп о х р а н я е т с я т в о и н а м и ц а р я А р т а к с е р к с а , з а н и м а ю щ и м и р а з л и ч н ы е к л е т к и этого по­ л я . Ц а р ь хочет р а с п о л о ж и т ь воинов т а к , чтобы о б е с п е ­ чить м а к с и м а л ь н у ю с у м м а р н у ю защищенность границы с в о е г о в л а д е н и я , т. е. 4 ( я — 1 ) к л е т о к н е п о с р е д с т в е н н о п р и м ы к а ю щ и х к п о л ю . К а ж д ы й воин о х р а н я е т те п р и г р а ­ н и ч н ы е к л е т к и , к о т о р ы е он « в и д и т » по г о р и з о н т а л и , в е р т и к а л и и д и а г о н а л я м . При этом, защищенность клет­ ки п р о п о р ц и о н а л ь н а к о л и ч е с т в у в о и н о в , е е о х р а н я ю щ и х . П о м о г и т е А р т а к с е р к с у н а й т и хотя б ы о д н о п о л о ж е н и е в о и н о в по его ж е л а н и ю . 14. У четырех кубиков грани о к р а ш е н ы в четыре р а з н ы х ц в е т а : к р а с н ы й , синий, з е л е н ы й и о р а н ж е в ы й . Р а з в е р т к и этих четырех кубиков в ы г л я д я т следующим образом: 261
0 к 3 3 с с 3 о 3 к к 3 о к к 0 3 к о с к 0 0 с Н а п и с а т ь программу, которая с о с т а в л я л а бы из этих че­ тырех кубиков прямоугольную призму, к а ж д а я боковая грань которой раскрашена во все четыре цвета без повторений. ЗАДАЧИ ПОВЫШЕННОЙ СЛОЖНОСТИ 1. Д а н а с т р о к а S и н а б о р Л с л о в Л А. ь к Разбить с т р о к у S на с л о в а н а б о р а в с е м и в о з м о ж н ы м и с п о с о б а м и . П р и м е р : S = ABBC А = А, Л = Л В , А = ВС, А = ВВС, Л = Я , Л = В S = Л В ВС S =Л ВВС S =АВ ВС 2. В н а п и с а н н о м в ы р а ж е н и и ((((1?2)?3)?4)?5)?б в м е ­ сто к а ж д о г о з н а к а «?» в с т а в и т ь з н а к одной из 4 а р и ф ­ м е т и ч е с к и х о п е р а ц и й ( + , —, *, / ) т а к , ч т о б ы р е з у л ь т а т Х 2 3 4 5 6 в ы ч и с л е н и й р а в н я л с я 35 ( п р и д е л е н и и д р о б н а я ч а с т ь в ч а с т н о м о т б р а с ы в а е т с я ) . Н а й т и все р е ш е н и я . 3. Составить программу, которая печатает все различ­ ные п р е д с т а в л е н и я ч и с л а N в в и д е в с е в о з м о ж н ы х с у м м н а т у р а л ь н ы х чисел. П р е д с т а в л е н и я ч и с л а , о т л и ч а ю щ и е ­ ся т о л ь к о п о р я д к о м с л а г а е м ы х , с ч и т а ю т с я о д и н а к о в ы м и . 4. Н а п и с а т ь п р о г р а м м у , о т в е ч а ю щ у ю на в о п р о с , м о ж ­ но ли из N д а н н ы х п р я м о у г о л ь н и к о в П, р а з м е р о в (а b ), i=l, N, с л о ж и т ь один б о л ь ш о й п р я м о у г о л ь н и к П р а з ­ м е р а ( а , Ь). Н и ж н и й л е в ы й угол б о л ь ш о г о п р я м о у г о л ь н и ­ ка и м е е т к о о р д и н а т у (0; 0), с т о р о н ы п а р а л л е л ь н ы о с я м ь 262 t
координат; маленькие прямоугольники можно поворачи­ в а т ь , но т а к , ч т о б ы их с т о р о н ы п о с л е п о в о р о т а о с т а в а ­ лись п а р а л л е л ь н ы осям координат. При составлении П п р я м о у г о л ь н и к и П, м о г у т б ы т ь и с п о л ь з о в а н ы не в с е . П р я м о у г о л ь н и к и П, не п е р е к р ы в а ю т с я . О г р а н и ч е н и я : i V < 8 ; a, b, а„ b —целые числа. Ответ в ы д а т ь в виде «да» — «нет», и в случае «да» н е о б х о д и м о в ы д а т ь д л я к а ж д о г о п р я м о у г о л ь н и к а П,-, о б р а з у ю щ е г о П, к о о р д и н а т у его л е в о г о н и ж н е г о и п р а в о ­ го в е р х н е г о у г л о в и его н о м е р L 5 . И г р о в о й а в т о м а т с о с т о и т из н е с к о л ь к и х и з о г н у т ы х т р у б о к , по ф о р м е п о х о ж и х на п е р е в е р н у т у ю б у к в у Y. С в е р х у у т р у б ы н а х о д и т с я входное о т в е р с т и е , а д в а выходных отверстия — снизу. Труба может находиться в о д н о м из д в у х в о з м о ж н ы х с о с т о я н и й . С о с т о я н и е 1 — это состояние, в котором з а к р ы т левый выход, Состояние О — з а к р ы т правый выход. t Ш а р и к и к л а д у т с я в н у т р ь один з а д р у г и м ч е р е з вход­ ное о т в е р с т и е . В С о с т о я н и и 1 ( р и с . 3 3 , а) ш а р и к п о к и д а е т т р у б у ч е р е з н е з а б л о к и р о в а н н ы й п р а в ы й выход, п р и э т о м С о с т о я н и е 1 а в т о м а т и ч е с к и и з м е н я е т с я на С о с т о я н и е О ( ( р и с . 3 3 , б ) , п р а в ы й вход з а б л о к и р о в а н , л е в ы й — нет). В С о с т о я н и и 0 все п р о и с х о д и т н а о б о р о т .
Рис. 34 П у с т ь и г р а л ь н ы й а в т о м а т состоит из 8 Y - о б р а з н ы х т р у б о к , их в з а и м н о е р а с п о л о ж е н и е п о к а з а н о на р и с у н к е 34. В ы м о ж е т е з а б р а с ы в а т ь ш а р и к и ч е р е з В х о д Л , Вход В или Вход С. П у с т ь , н а п р и м е р , п е р в ы й ш а р и к о п у с к а е т с я ч е р е з В х о д Л . Он п о к и д а е т т р у б у G ч е р е з л е в ы й в ы х о д , и з м е н я я ее с о с т о я н и е с 0 на 1, п о с т у п а е т в G и п о к и д а е т автомат через левый выход G (изменяя Состояние G с 0 на 1). Эту п р о ц е д у р у з а п и ш е м с л е д у ю щ и м о б р а з о м : { 6 6 6 Л З а т е м з а б р о с и м ш а р и к ч е р е з В х о д Л (он н а х о д и т с я в С о с т о я н и и 1). Ш а р и к п о к и д а е т G ч е р е з п р а в ы й в ы х о д , и з м е н я я С о с т о я н и е 1 в С о с т о я н и е 0, п о п а д а е т в G , поки­ д а е т G ч е р е з п р а в ы й в ы х о д , и з м е н я я С о с т о я н и е 1 в Со­ с т о я н и е 0, п о п а д а е т в G , п о к и д а е т а в т о м а т ч е р е з л е в ы й в ы х о д ( и з м е н я я G из С о с т о я н и я 0 в С о с т о я н и е 1). Все в ы ш е и з л о ж е н н ы е д е й с т в и я мы з а п и ш е м в виде: { 4 4 7 7 ЛЛ 264
Е с л и мы опустим третий ш а р и к ч е р е з Вход В, ч е т в е р ­ тый — ч е р е з В х о д С, то все д е й с т в и я з а п и ш у т с я с л е д у ю ­ щим образом: ААВС Необходимо: 1) Ввести с к л а в и а т у р ы п о с л е д о в а т е л ь н о с т ь из 8 д в о ­ ичных цифр (бит), п о к а з ы в а ю щ и х соответственно н а ч а л ь ­ ное С о с т о я н и е G,— G : 8 Бит 7 Вход G 6 G 8 5 7 G 3 4 6 G G 5 l 2 G 4 G 3 0 2 G, Н а п р и м е р , п о с л е д о в а т е л ь н о с т ь 11001010 о з н а ч а е т , что G , G , G и G н а х о д я т с я в С о с т о я н и и 1 ( л е в ы й вход заблокирован), тогда как G , G , G и G находятся в С о с т о я н и и 0 ( п р а в ы й вход з а б л о к и р о в а н ) . 2) В в е с т и с к л а в и а т у р ы в т о р у ю п о с л е д о в а т е л ь н о с т ь из 8 бит, п о к а з ы в а ю щ и х к о н е ч н ы е С о с т о я н и я G, — G . 3) Н а п е ч а т а т ь п о с л е д о в а т е л ь н о с т ь ходов А, В или С, у к а з ы в а ю щ у ю , каким образом можно получить конечную п о з и ц и ю , з а б р а с ы в а я ш а р и к и ч е р е з В х о д ы А, В и С. 6. П у с т ь с л о в о — это п о с л е д о в а т е л ь н о с т ь от 1 д о 8 заглавных букв латинского алфавита. З а д а е т с я м н о ж е с т в о с л о в A — [a[l], а [2], а [«]}, га<10. Из слов множества А составляется текст — последовательность слов, з а п и с а н н ы х друг за другом без п р о б е л о в . С л о в а могут в с т р е ч а т ь с я в т е к с т е п р о и з в о л ь ­ ное ч и с л о р а з . Д е ш и ф р о в к а т е к с т а — это р а з б и в к а т е к с т а на с л о в а м н о ж е с т в а А. В д е ш и ф р о в а н н о м т е к с т е с л о в а р а з д е л я ­ ются пробелами. Необходимо: 1) О п р е д е л и т ь , с у щ е с т в у е т л и д л я з а д а н н о г о м н о ж е ­ с т в а А т а к о й т е к с т , к о т о р ы й д е ш и ф р у е т с я не е д и н с т в е н ­ н ы м о б р а з о м ( с а м т е к с т п р и в о д и т ь не н а д о ) . 8 7 4 2 6 5 3 ( 8 265
Примеры: а ) А={В, С} Л ю б о й текст д е ш и ф р у е т с я о д н о з н а ч н о . б) Л ={В, ВС, С] Существует текст, который д е ш и ф р у е т с я д в у м я спо­ собами: Т е к с т ->- Д е ш и ф р о в к а ВВС -у в в с ВВС -»- В ВС 2 ) Е с л и т а к о й т е к с т с у щ е с т в у е т , то и с к л ю ч и т ь из м н о ж е с т в а А м и н и м а л ь н о е ч и с л о с л о в та к, ч т о б ы п о с л е этого л ю б о й т е к с т , с о с т а в л е н н ы й из с л о в п о л у ч е н н о г о м н о ж е с т в а А, д е ш и ф р о в а л с я о д н о з н а ч н о . Н а п е ч а т а т ь эти и с к л ю ч е н н ы е с л о в а . Е с л и т а к о й н а б о р не е д и н с т в е н н ы й , то н а п е ч а т а т ь все н а б о р ы . 3) Д л я в в е д е н н о г о т е к с т а п р о и з в е с т и его д е ш и ф р о в к у и, е с л и д е ш и ф р о в к а не е д и н с т в е н н а я , в ы в е с т и все в а ­ рианты. Примечание. рован. Порядок выполнения пунктов строго фикси­ ЗАДАЧИ ДЛЯ САМОСТОЯТЕЛЬНОГО РЕШЕНИЯ 1. Во в р е м я п о е з д к и на п о е з д е д е в о ч к а з а м е н и л а в н а з в а н и и п о е з д а к а ж д у ю б у к в у ее н о м е р о м в р у с с к о м а л ф а в и т е и п о л у ч и л а з а п и с ь из е д и н и ц и д в о е к « 2 1 1 2 2 1 — 2 1 2 2 1 » . О п р е д е л и т ь , о т к у д а и к у д а идет п о е з д . 2 . Д а н н ы е N к о с т о ч е к д о м и н о по п р а в и л а м и г р ы в ы к л а д ы в а ю т с я в п р я м у ю цепочку, начиная с косточки, в ы б р а н н о й п р о и з в о л ь н о , в о б а к о н ц а д о тех п о р , п о к а это возможно. Построить алгоритм, позволяющий опреде­ лить такой в а р и а н т в ы к л а д ы в а н и я з а д а н н ы х косточек, п р и к о т о р о м к м о м е н т у , к о г д а ц е п о ч к а не м о ж е т б ы т ь п р о д о л ж е н а , «на р у к а х » о с т а н е т с я м а к с и м а л ь н о е ч и с л о очков. 3. В к л е т к а х т а б л и ц ы р а с с т а в л е н ы ч и с л а . Р а с с т а в и т ь в э т и х к л е т к а х К ф е р з е й т а к , ч т о б ы они д р у г д р у г а не 266
б и л и и чтобы с у м м а чисел, ими з а к р ы в а е м ы х , б ы л а максимальной. 4 . В в о д и т с я с т р о к а не б о л е е чем из 6 ц и ф р и н е к о т о ­ рое ц е л о е ч и с л о R. Р а с с т а в и т ь з н а к и а р и ф м е т и ч е с к и х о п е р а ц и й + , —, * , / ( д е л е н и е е с т ь д е л е н и е н а ц е л о , т. е. 1 1 / 3 = 3) и о т к р ы в а ю щ и е и з а к р ы в а ю щ и е к р у г л ы е скобки так, чтобы получить в результате вычисления ч и с л о R. Л и ш н и е к р у г л ы е с к о б к и о ш и б к о й не я в л я ю т с я . Н а п р и м е р : С т р о к а 502597, / ? = 1 2 0 : ( ( 5 + 0 ) * ( 2 5 - ( 9 / 7 ) ) ) = 120. 5. П е р е ч и с л и т ь все р а с с т а н о в к и с к о б о к в п р о и з в е д е ­ нии га с о м н о ж и т е л е й . П о р я д о к с о м н о ж и т е л е й не м е н я ­ ется, скобки полностью определяют порядок действий. ( Н а п р и м е р , д л я га = 4 есть 5 р а с с т а н о в о к : {(ab)c)d, (a(bc))d, {ab){cd\ a({bc)d), a{b(cd)).) 6. С о с т а в и т ь п р о г р а м м у , к о т о р а я п е ч а т а е т все р а з ­ личные представления числа N в виде всевозможных с у м м К н а т у р а л ь н ы х чисел (1 <iK<N). П р е д с т а в л е н и я числа, отличающиеся только порядком с л а г а е м ы х , счи­ таются одинаковыми. 7. С о с т а в и т ь п р о г р а м м у , к о т о р а я п е ч а т а е т все р а з ­ личные представления числа N в виде всевозможных п р о и з в е д е н и й К н а т у р а л ь н ы х чисел (N, К — в в о д я т с я , KK<.N). Е с л и К = 0, то в ы д а т ь в с е в о з м о ж н ы е п р о ­ изведения. Представления числа, отличающиеся только порядком сомножителей, считаются одинаковыми. 8. В некоей д е т с к о й к н и г е с т р а н и ц ы р а з д е л е н ы на три части, причем к а ж д у ю часть можно перелистывать отдельно. На каждой странице трехсложные имена зве­ рей р а с п о л о ж е н ы т а к , что к а ж д ы й с л о г н а х о д и т с я на о д н о й ч а с т и с т р а н и ц ы ; н а п р и м е р , с л о г и с т о я т т а к : Е-1еf a n t , k r o - k o - d i l , k a n - g u - r u h . П о с л е п е р е л и с т ы в а н и я одной части страницы возможны совмещения: Kro-ko-fant, kanle-dil. Написать программу: 267
а) с помощью которой трехсложные имена зверей м о ж н о будет д о б а в л я т ь в книгу; б) к о т о р а я н а х о д и т и п р о т о к о л и р у е т , к а к м о ж н о пе­ р е л и с т ы в а т ь к н и г у , ч т о б ы н а й т и п у т ь от одного данного имени животного к другому; в) к о т о р а я , р е ш и в п у н к т б ) , н а х о д и т н е с к о л ь к о спо­ собов перелистывания. 9. Е с л и кто-то з а х о ч е т р а з в е с т и в а к в а р и у м е э к з о т и ­ ч е с к и х р ы б , то он не с м о ж е т о б о й т и с ь б е з с о в е т а э к с п е р ­ т а . П р и п о к у п к е с л е д у е т и м е т ь в в и д у , что не к а ж д ы й в и д р ы б у ж и в а е т с я с д р у г и м в и д о м и, к о н е ч н о , р ы б ы н е с о в м е с т и м ы х в и д о в не д о л ж н ы ж и т ь в м е с т е в а к в а р и у ­ ме и б о р о т ь с я и л и д а ж е п о е д а т ь д р у г д р у г а . Необходимо написать программу, которая запраши­ вает: а ) с у м м у , которой р а с п о р я ж а ю т с я п р и п о к у п к е р ы б ; б) и м е ю щ и е с я в и д ы р ы б с ц е н а м и з а ш т у к у ; в) в и д ы р ы б , не п е р е н о с я щ и е д р у г д р у г а . П о к у п а т е л ю д о л ж е н б ы т ь в ы п и с а н чек на м а к с и м а л ь ­ но в о з м о ж н у ю с у м м у , с п е р е ч и с л е н и е м в и д о в р ы б , кото­ рые могут у ж и в а т ь с я друг с другом. 10. Д ы р о к о л п р о б и в а е т на д л и н н о й полосе б у м а г и по д в а о д и н а к о в ы х о т в е р с т и я з а одно н а ж а т и е е г о р ы ч а г а и п о с л е н е с к о л ь к и х н а ж а т и й п о л у ч а е т с я с л е д у ю щ е е со­ стояние бумаги. О о о о о о о о о о о о л п л пл п лл пп л п Б у к в ы Л и П под л е н т о й о б о з н а ч а ю т с о о т в е т с т в е н н о левое и правое отверстия дырокола. П о и з в е с т н ы м к о о р д и н а т а м о т в е р с т и й на п о л о с е о п р е ­ делить возможную ширину между отверстиями дыро­ кола. 11. В б и л е т е п а с с а ж и р а о к а з а л о с ь п р о б и т о о т в е р с т и й б о л ь ш е , чем ш т ы р е й в к о м п о с т е р е . П а с с а ж и р у т в е р ж ­ д а л , что п о л ь з о в а л с я т о л ь к о о д н и м к о м п о с т е р о м , но с л у ч а й н о н а ж а л на н е г о н е с к о л ь к о р а з . К о н т р о л е р у 268
т р е б у е т с я о п р е д е л и т ь , могло л и б ы т ь п о л у ч е н о з а д а н н о е расположение отверстий одним и тем ж е компостером, если билет м о ж н о пробивать с обеих сторон неограни­ ченное число р а з и произвольно п е р е м е щ а т ь и поворачи­ в а т ь о т н о с и т е л ь н о к о м п о с т е р а . П р о б и т ы е о т в е р с т и я не выходят за пределы билета. В билете было пробито N(N<.10) отверстий. 1 ) Д л я к о м п о с т е р а с д в у м я ш т ы р я м и ( S = 2) с о с т а ­ вить программу, которая: а ) о п р е д е л я е т , м о ж н о ли п о л у ч и т ь з а д а н н ы м к о м ­ п о с т е р о м т р е б у е м о е р а с п о л о ж е н и е о т в е р с т и й в би­ л е т е ( е с л и это в о з м о ж н о , то и з о б р а ж а е т в и д б и л е ­ та п о с л е к а ж д о г о н а ж а т и я к о м п о с т е р а , в п р о т и в ­ ном с л у ч а е в ы в о д и т с о о т в е т с т в у ю щ е е с о о б щ е н и е ) ; б) о п р е д е л я е т к о л и ч е с т в о К р а з л и ч н ы х к о м п о с т е р о в , к а ж д ы м из к о т о р ы х м о ж н о п р о б и т ь з а д а н н у ю кон­ фигурацию; в) п р и К==0 н а х о д и т к о м п о с т е р , с п о м о щ ь ю к о т о р о г о м о ж н о п р о б и т ь н а и б о л ь ш е е к о л и ч е с т в о из з а д а н ­ ных отверстий; г) н а х о д и т м и н и м а л ь н о е число н а ж а т и й , т р е б у е м о е для пробивки заданной конфигурации отверстий, д л я к а ж д о г о к о м п о с т е р а из п. б). 2) Р е ш и т ь з а д а ч у 1) д л я к о м п о с т е р о в с ч и с л о м штырей S ( S > 2 ) . Примечания. 1. Все исходные данные — натуральные числа. 2. Компостеры, дающие при однократном нажатии совпадающие конфигурации отверстий, считаются одинаковыми. 3. Относительное расположение отверстий в билете и штырей в компостере вводится либо с клавиатуры, либо из файла с именем COMP.DAT. Структура вводимой информации: у[1], x[N], y[N], S, и[II о[1], u[S], v[S}}, где x[i], y[i]—координаты отверстий в билете, u[i], v[i\—координа­ ты штырей в компостере. 4. Нажатие компостера моделировать клавишей «Пробел». 5. При выводе конфигурации на экран изображать координатную сетку. При этом программа должна осуществлять подходящее масшта­ бирование. 269
12. О д н и м из с т а н д а р т н ы х м е т о д о в к о д и р о в а н и я ин­ ф о р м а ц и и к о г д а - т о б ы л с л е д у ю щ и й : т е к с т ( д л и н ы /) з а ­ п и с ы в а л с я по с т р о к а м с л е в а н а п р а в о с в е р х у в н и з в п р я ­ м о у г о л ь н и к е р а з м е р а mXn(m'n^l), д о п о л н я я с ь , по не­ о б х о д и м о с т и , п р о б е л а м и ; п о с л е э т о г о т е к с т из п р я м о ­ у г о л ь н и к а в ы п и с ы в а л с я по с т о л б ц а м и п о л у ч а л о с ь шифрованное сообщение. Н а п р и м е р , и с х о д н ы й т е к с т « I t is a n i c e w e a t h e r t o d a y » ( m = 5, « = 6): 1 2 3 4 5 6 1 I t — i s — 2 a — n 1 3 — w e a 4 e г — t 5 a У — с e t h 0 d — — — Ш и ф р о в а н н ы й текст: «Ia eat w r y ne iiat scto ehd». Д а е т с я ш и ф р о в а н н ы й т е к с т д л и н ы s, с о с т о я щ и й из б у к в и п р о б е л о в , и и з в е с т н о , что в исходном т е к с т е есть, по к р а й н е й м е р е , о д н о из с л о в н а б о р а а , a, fe^lO. Под словом в тексте понимается последовательность с и м в о л о в , не с о д е р ж а щ а я п р о б е л о в , и о к р у ж е н н а я про­ б е л а м и , з а и с к л ю ч е н и е м с л у ч а е в , к о г д а с л о в о стоит в н а ч а л е л и б о в к о н ц е т е к с т а ( т о г д а ему м о ж е т не п р е д ­ ш е с т в о в а т ь и л и з а ним м о ж е т не с л е д о в а т ь ) " один или несколько пробелов. Д е ш и ф р о в а т ь текст. 13. « Ц а р е в н а » . В одной из к л е т о к п о л я р а з м е р а я Х и ( л > 1 ) Кощей Бессмертный спрятал М а р ь ю Царев­ ну, с о з д а в е щ е н е и з в е с т н о е ч и с л о т ( 1 < ш < п ) е е д в о й ­ н и к о в в р а з л и ч н ы х с в о б о д н ы х к л е т к а х . И ц а р е в н а , и ее двойники одинаково надежно укрыты и невидимы. О т п р а в и в ш и й с я на п о и с к и ц а р е в н ы И в а н у ш к а - д у р а ­ чок п о п р о с и л у б л а г о в о л я щ е й к н е м у щ у к и д а т ч и к 0 k 2 270
б и о с и г н а л о в . И з в е с т н о , что и М а р ь я Ц а р е в н а и е е д в о й ­ ники испускают незатухающие н а п р а в л е н н ы е биолучи, распространяющиеся параллельно сторонам и диагона­ л я м поля. И в а н у ш к а - д у р а ч о к т а к ж е з н а е т , что и н т е н с и в н о с т ь биолуча М а р ь и Ц а р е в н ы в т р а з в ы ш е интенсивности б и о л у ч е й д в о й н и к о в . И в а н у ш к а м о ж е т у с т а н о в и т ь свой датчик в любую клетку поля и получить величину сум­ марной интенсивности биолучей, приходящих в клетку. Помогите Иванушке определить местонахождение на­ стоящей царевны. 14. К Ш т и р л и ц у п о п а л а з а к о д и р о в а н н а я з а п и с к а Б о р ­ мана: 15, 16, 16, 16, 16, 4, 5, 8, 3 1 , 2 5 , 20, 2, 19, 18. Ш т и р л и ц з н а л , что Б о р м а н п и ш е т п о - р у с с к и , и с п о л ь ­ з у я о б ы ч н у ю н у м е р а ц и ю б у к в в р у с с к о м а л ф а в и т е от 1 д о 3 3 . П р о б е л м е ж д у с л о в а м и он о б о з н а ч а е т н о м е р о м 0. Т а к ж е он з н а л , что Б о р м а н к о д и р у е т свои с о о б щ е н и я , д о б а в л я я к н о м е р у к а ж д о й б у к в ы ч и с л о х = па-\-Ь, где п — п о р я д к о в ы й н о м е р этой б у к в ы в с о о б щ е н и и , а и Ь — константы, известные только Борману. Если результат о к а з ы в а е т с я б о л ь ш е 3 3 , то из него в ы ч и т а е т с я 34. К р о м е того, Б о р м а н ни в о д н о м с о о б щ е н и и не о б х о д и т с я б е з местоимения «Я». Р а с ш и ф р у й т е записку. 1 2 со 15. Н а д о с к е р а з м е р а 3 X 3 п р о и з в о л ь н ы м о б р а з о м р а с с т а в л е н ы ф и ш к и , з а н у м е р о в а н н ы е от 1 до 7. З а один ход м о ж н о п е р е д в и н у т ь ф и ш к у на с в о б о д н о е с о с е д н е е п о л е по г о р и з о н т а л и или по в е р т и к а л и . Н а п и с а т ь п р о ­ г р а м м у , приводящую фишки в конечную позицию: 4 5 6 7 271
16. Н а оси Ох б ы л и з а д а н ы N т о ч е к с ц е л о ч и с л е н н ы ­ ми к о о р д и н а т а м и . Н е к о т о р ы е точки м о г у т и м е т ь о д и н а ­ ковые координаты. Б ы л и измерены и записаны всевоз­ можные расстояния между этими точками. Расстояние м е ж д у д в у м я т о ч к а м и м ы х р а н и м т о л ь к о один р а з , р а с с т о я н и е от т о ч к и д о нее с а м о й ( р а в н о е 0) не х р а н и т с я , п о э т о м у р а с с т о я н и й всего N(N —\)/2. Н е о б х о д и м о по в в е д е н н о й п о с л е д о в а т е л ь н о с т и из N (N—1)/2 р а с с т о я н и й н а й т и одно из в о з м о ж н ы х р а с п о ­ л о ж е н и й т о ч е к на п р я м о й или у к а з а т ь , что т а к о г о не существует. 17. Д а н ы 4 с л о в а . Д л и н а к а ж д о г о с л о в а не б о л е е 12 с и м в о л о в . Н а п и с а т ь п р о г р а м м у , п р о в е р я ю щ у ю , м о ж н о л и из д а н н ы х с л о в с о с т а в и т ь к р о с с в о р д при у с л о в и и , что к а ж д о е слово пересекается с двумя другими и распола­ г а е т с я сверху в н и з или с л е в а н а п р а в о . С е т к а не о б я з а т е л ь н о с и м м е т р и ч н а . Р е з у л ь т а т в ы в е с т и на э к р а н в виде кроссворда. В в о д : в в о д я т с я 4 с л о в а , по о д н о м у в с т р о к е . В ы в о д : на э к р а н в ы в о д и т с я один из в а р и а н т о в кроссворда или слово " Н е л ь з я " . Пример: Ввод: Вывод: АЛЬФА АЛЬФА АСТРА С А ФАКИР Т К АВАРИЯ Р И АВАРИЯ 18. Н а п е ч а т а т ь в с е п о с л е д о в а т е л ь н о с т и из k п о л о ж и ­ т е л ь н ы х ц е л ы х ч и с е л , у к о т о р ы х i-й член не превосхо­ д и т i. 19. П о с т р о и т ь все о т о б р а ж е н и я м н о ж е с т в а {1, k) в {1, «} ( п р е д п о л а г а е т с я , что k^ln), т а к и е , что ни один э л е м е н т не п е р е х о д и т с а м в с е б я . П о р о ж д е н и е очередного элемента д о л ж н о требовать порядка k дей­ ствий. 272
2 0 . Н а п е ч а т а т ь все п е р е с т а н о в к и чисел I, 2, п так, ч т о б ы к а ж д а я с л е д у ю щ а я п о л у ч а л а с ь из п р е д ы д у щ е й п е р е с т а н о в к о й ( т р а н с п о з и ц и е й ) д в у х соседних ч и с е л . Н а ­ п р и м е р , при я = 3 д о п у с т и м т а к о й п о р я д о к : 3. 2 1 - ^ - 2 3 . 1 - ^ 2 . 1 3 + 1 2 . 3 + 1 . 3 2 + 3 1 2 ( м е ж д у переставляемыми числами вставлены точки). 2 1 . Э л е м е н т а м и п о с л е д о в а т е л ь н о с т и д л и н ы 2п могут б ы т ь ч и с л а 1 или — 1 . С у м м а всех э л е м е н т о в п о с л е д о в а ­ т е л ь н о с т и р а в н а н у л ю . П е р е ч и с л и т ь все т а к и е п о с л е д о в а ­ тельности, у которых сумма любого начального отрезка п о л о ж и т е л ь н а (т. е. ч и с л о минус е д и н и ц в нем не п р е в о с ­ ходит числа единиц). 22. Н а о к р у ж н о с т и з а д а н о 2п т о ч е к , п р о н у м е р о в а н ­ н ы х от 1 до 2гг. П е р е ч и с л и т ь в с е с п о с о б ы п р о в е д е н и я п н е п е р е с е к а ю щ и х с я х о р д с в е р ш и н а м и в этих т о ч к а х . 2 3 . П е р е ч и с л и т ь все п о с л е д о в а т е л ь н о с т и из п н у л е й , е д и н и ц и д в о е к , в к о т о р ы х н и к а к а я г р у п п а ц и ф р не п о в т о р я е т с я д в а р а з а п о д р я д (нет к у с к а в и д а XX). 2 4 . Е с т ь N к а р т о ч е к . Н а к а ж д о й из них ч е р н ы м и ч е р н и л а м и н а п и с а н ее у н и к а л ь н ы й н о м е р — ч и с л о от 1 д о N. Т а к ж е на к а ж д о й к а р т о ч к е к р а с н ы м и ч е р н и л а м и н а п и с а н о е щ е одно ц е л о е ч и с л о , л е ж а щ е е в п р о м е ж у т к е от 1 д о N ( н е к о т о р ы м и о д и н а к о в ы м и « к р а с н ы м и » ч и с л а ­ ми м о г у т п о м е ч а т ь с я н е с к о л ь к о к а р т о ч е к ) . Н а п р и м е р , iV = 5; 5 к а р т о ч е к п о м е ч е н ы с л е д у ю щ и м образом: «Красное» число 3 2 СО 1 со «Черное» число 4 5 2 4 2 Н е о б х о д и м о в ы б р а т ь из д а н н ы х N к а р т о ч е к м а к с и ­ мальное число карточек таким о б р а з о м , чтобы множе­ с т в а « к р а с н ы х » и « ч е р н ы х » чисел на них с о в п а д а л и . Д л я р а с с м о т р е н н о г о п р и м е р а это б у д у т к а р т о ч к и с « ч е р н ы м и » н о м е р а м и 2, 3 , 4 ( м н о ж е с т в о к р а с н ы х н о м е р о в , к а к и т р е б у е т с я в з а д а ч е , то ж е — {2, 3, 4}). 10 Информатика, 8—9 кл.) 273
ввод < N = > N , N<50 < " Ч е р н ы й " н о м е р 1, " к р а с н ы й " — > " к р а с н о е " _ ч и с ло_1 < С " Ч е р н ы й " номер N, " к р а с н ы й " — > " к р а с н о е " число__Н ВЫВОД: < В выбранном- множестве элементов > к о л и ч е с т в о _ _ э л е ментов S < " Ч е р н ы е " номера выбранных к а р т о ч е к > а 1 , aS 25. «Тетрамино». Д а н о поле р а з м е р а 6 X 6 клеток. К л е т к и п р о н у м е р о в а н ы от 1 до 36 с л е в а направо и сверху вниз (как при письме). Р о в н о ч е т ы р е к л е т к и из них з а к р а ш е н ы . Н а п и с а т ь программу, которая для введенных номеров з а к р а ш е н ­ ных к л е т о к в ы я с н я е т , о б р а з у ю т л и они к а к у ю - л и б о ф и г у ­ ру т е т р а м и н о (эти ф и г у р ы м о г у т б ы т ь п о в е р н у т ы ) : 1 2 3 4 5 6 7 Е с л и в в е д е н н ы й н о м е р м е н ь ш е 1 и л и б о л ь ш е 36, или к а к о й - т о н о м е р в в е д е н п о в т о р н о , то в ы в е с т и с о о б щ е н и е "Ошибка". Если закрашенные клетки образуют фигуру тетрами­ но, в ы в е с т и н о м е р этого т е т р а м и н о , в п р о т и в н о м с л у ч а е выдать сообщение: " Н е тетрамино". П у с т ь з а к р а ш е н ы N к л е т о к . Ч и с л о N и н о м е р а этих клеток вводятся. Определить, можно ли разбить з а к р а ­ ш е н н у ю о б л а с т ь на ф и г у р ы т е т р а м и н о . Ф и г у р ы не м о г у т п е р е с е к а т ь с я , и о б ъ е д и н е н и е э т и х ф и г у р п о л н о с т ь ю сов­ падает с закрашенной областью. В ы д а т ь с о о б щ е н и е " М о ж н о р а з б и т ь " или " Н е л ь з я 274
р а з б и т ь " . В случае, если р а з б и в к а возможна, в ы д а т ь какую-нибудь разбивку в виде: Н о м е р ф и г у р ы . Н о м е р а о б р а з у ю щ и х ее к л е т о к . Н о м е р ф и г у р ы . Н о м е р а о б р а з у ю щ и х ее к л е т о к . 26. И м е е т с я N (N<Z7) дисков одинаковой толщины с р а д и у с а м и г,, г . Эти д и с к и у п а к о в ы в а ю т с я в ко­ р о б к у т а к и м о б р а з о м , что к а ж д ы й из них с т о и т р е б р о м на д н е к о р о б к и и все д и с к и н а х о д я т с я в одной п л о с к о с т и . Н а й т и м и н и м а л ь н у ю д л и н у к о р о б к и , в к о т о р у ю все они могут б ы т ь у п а к о в а н ы , и у к а з а т ь п о р я д о к одной из возможных упаковок. Вход: < 1-я с т р о к а >N <2-я строка>г г ...r Выход: М и н и м а л ь н а я длина: число Возможный порядок: порядок Пример: 3 2.02.01.0 М и н и м а л ь н а я д л и н а : 9.65685 Возможный порядок: 1 3 2 п у 2 N УКАЗАНИЯ К Р Е Ш Е Н И Ю ЗАДАЧ ПОВЫШЕННОЙ сложности 1. Эта з а д а ч а р е а л и з у е т с я с л е д у ю щ и м р е к у р с и в н ы м алгоритмом поиска с возвращением (все слова набора Л у п о р я д о ч е н ы по н о м е р а м ) . а ) Е с л и с т р о к а п у с т а я , то о д н а из в о з м о ж н ы х д е ­ шифровок найдена, иначе — при разборе текста мы п р о в е р я е м Л,- ( п р и и з м е н е н и и i от 1 до п) на в х о ж д е н и е в н а ч а л о д е ш и ф р у е м о й в д а н н ы й мо­ мент с т р о к и . б ) Е с л и к а к о е - т о Л,- входит в с т р о к у к а к п р е ф и к с , то з а п о м и н а е м н о м е р i этого с л о в а , з а т е м в ы д е л я е м с л о в о из с т р о к и , а с о с т а т к о м т е к с т а п р о и з в о д и м о п е р а ц и ю р а з б о р а по п у н к т у а ) . 275
Е с л и ни одно из Л, не в х о д и т в к а ч е с т в е п р и с т а в к и в д е ш и ф р у е м у ю с е й ч а с с т р о к у , то о с у щ е с т в л я е м в о з в р а т на п у н к т а ) , п р е д в а р и т е л ь н о д о б а в л я я в н а ч а л о с т р о к и п о с л е д н е е у д а л е н н о е о т т у д а слово, и п ы т а е м с я в ы д е л и т ь из т е к с т а с л о в о с б о л ь ш и м н о м е р о в в А. Е с л и в о з в р а т осуществить невозможно (так к а к мы находимся в нача­ л е исходной с т р о к и ) , то а л г о р и т м з а к а н ч и в а е т с в о ю р а б о т у . Все в о з м о ж н ы е д е ш и ф р о в к и н а й д е н ы . 2. В с е г о м о ж е т б ы т ь 4 а р и ф м е т и ч е с к и х о п е р а ц и и ( + , —, * , / ) . З а н у м е р у е м их от 0 д о 3 . В м е с т о к а ж д о г о из п я т и з н а к о в «?» м о ж е т с т о я т ь один из з н а к о в о п е р а ц и и . З а в е д е м м а с с и в Л из 5 ц е л ы х ч и с е л , в г-м э л е м е н т е м а с с и в а б у д е т х р а н и т ь с я к о д с о о т в е т с т в у ю щ е й i-му з н а ­ ку «?» о п е р а ц и и , т. е. ч и с л о от 0 до 3 . Н а ч а л ь н а я к о н ф и ­ г у р а ц и я — все э л е м е н т ы м а с с и в а н у л е в ы е , к о н е ч н а я — все они р а в н ы 3. Г е н е р а ц и я о ч е р е д н о й к о н ф и г у р а ц и и знаков равносильна прибавлению единицы в четверич­ ной с и с т е м е с ч и с л е н и я , в которой р а з р е ш а е т с я п о л ь з о ­ в а т ь с я т о л ь к о ц и ф р а м и от 0 до 3 . Т а к а я г е н е р а ц и я о п и с а н а в а л г о р и т м е (5.3). 3. П р е д л о ж и м простой с п о с о б п о с т р о е н и я всех р а з б и ­ ений ч и с л а на с л а г а е м ы е . Р а з б и е н и я б у д у т с т р о и т ь с я в порядке, обратном лексикографическому. Очевидно, что п е р в ы м р а з б и е н и е м в т а к о м п о р я д к е б у д е т р а з б и е ­ ние, с о д е р ж а щ е е одно с л а г а е м о е , р а в н о е N, а п о с л е д ­ ним — р а з б и е н и е из N с л а г а е м ы х , р а в н ы х 1. за К а к выглядит разбиение, следующее непосредственно разбиением л = с, + . . . + с ? к Будем искать разбиение, которое имеет самое большое число н а ч а л ь н ы х с л а г а е м ы х , р а в н ы х н а ч а л ь н ы м с л а г а е ­ м ы м д а н н о г о р а з б и е н и я ( о б о з н а ч и м эти с л а г а е м ы е а а _ ! ) и оставшиеся с л а г а е м ы е которого определяются разбиением, непосредственно следующим за разбиением ь ( s= a + a t 276 i + l + ...+a . k
Л е г к о в и д е т ь , что эти у с л о в и я о д н о з н а ч н о о п р е д е л я ­ ют з н а ч е н и е / : t = m a x { i : a > 1}. ; Таким образом, задача свелась к нахождению разби­ ения, непосредственно следующего за разбиением s= a t + l + ... + 1, г д е а , - > 1 , а к о л и ч е с т в о е д и н и ц р а в н о k — /. Т а к и м р а з б и ­ ением является разбиение Si = p + P + --- +P + (s m o d р), где p = a — 1. 4. К а ж д ы й П, м о ж н о п о л о ж и т ь л и б о г о р и з о н т а л ь н о , л и б о в е р т и к а л ь н о . Б у д е м з а п о л н я т ь П от н и ж н е г о л е в о г о угла. На каждом шаге: 1) искать в у ж е заполненной фигуре " н и ш у " с мини­ мальными координатами левого нижнего угла; 2) д л я к а ж д о г о из е щ е не и с п о л ь з о в а н н ы х II, повторять б р а т ь о ч е р е д н о й П; и п ы т а т ь с я в с т а в и т ь в 'нишу" е с л и у д а л о с ь , и мы не в ы ш л и з а п р е д е л ы П, то п о м е т и т ь II,- к а к и с п о л ь з о в а н н ы й и на ш а г 1 scratch: п о м е т и т ь II, к а к н е и с п о л ь з о в а н н ы й к о н е ц то конец д л я е с л и и с п о л ь з о в а л и все П„ то п е ч а т ь р е з у л ь т а т а . Стоп е с л и не и с п о л ь з о в а н ни один П , то р е ш е н и я нет и н а ч е в о з в р а т на s c r a t c h . 5. Во всех у з л а х ( т р у б к а х ) с х е м ы мы д о л ж н ы п о л у ­ чить с о с т о я н и е G'. П е р в о н а ч а л ь н о у с т а н о в и м G G и G t ; h 2 3 277
в G[, G и G' , в б р а с ы в а я , по необхо­ димости, ш а р и к и через входы Л, В та С с о о т в е т с т в е н н о . Д л я того ч т о б ы G,, G и G о с т а в а л и с ь в с о с т о я н и и G\, G' и О'з, н е о б х о д и м о , ч т о б ы ч е р е з к а ж д ы й из входов забрасывалось л и ш ь четное ч и с л о ш а риков. iG4 Если проследить за шариками, за­ б р о ш е н н ы м и в и г р о в о й а в т о м а т , то м ы м о ж е м з а м е т и т ь , что р е з у л ь т а т хода, н а п р и м е р , ABC а н а л о г и ч е н ре­ з у л ь т а т у х о д а ВСА, т. е. от п о р я д к а з а б р а с ы в а н и я р е з у л ь т а т не з а в и с и т . C6 C7 Р а с с м о т р и м у з л ы , с о с т о я н и е кото­ рых может меняться при з а б р а с ы в а ­ Рис. 35 нии ш а р и к о в ч е р е з вход Л , т а к к а к п р и в ы б р а н н о й м е т о д и к е з а б р а с ы в а н и я т о л ь к о четного ч и с л а ш а р и к о в ( р и с . 35) ч е р е з входы в с е г д а G, = G\, то с о с т о я н и й G G G м о ж е т б ы т ь л и ш ь 2 = 8, от ООО до 111. Е с л и м ы б у д е м з а б р а с ы в а т ь ч е р е з Л п а р ы ш а р и к о в , т о при з а б р а с ы в а н и и с е р и и м а к с и м у м из 8 п а р ш а р и к о в к а к о е - т о с о с т о я н и е G G G д о л ж н о о б я з а т е л ь н о повто­ р и т ь с я на п р о т я ж е н и и с е р и и . Д а л е е с о с т о я н и я б у д у т ц и к л и ч е с к и п о в т о р я т ь с я , и с л у ч а й с з а б р а с ы в а н и е м бо­ лее 8 пар шариков сводится к случаю с количеством пар, не п р е в о с х о д я щ и м 8. А н а л о г и ч н о д л я з а б р а с ы в а н и я ш а р и к о в ч е р е з В мы п о л у ч а е м с е р и ю из не б о л е е ч е м 2 = 32 п а р ш а р и к о в , на п р о т я ж е н и и к о т о р о й б у д у т у с т а н о в л е н ы все в о з м о ж н ы е состояния G , G , G , G , G , а д л я входа С серия, как и д л я Л , б у д е т и м е т ь д л и н у не б о л е е 8 п а р . П е р е б и р а я все в о з м о ж н ы е к о м б и н а ц и и А , В , С з а б р а с ы в а н и я шариков (тут А о б о з н а ч а е т с е р и ю из 2х з а б р а с ы в а н и й ш а р и к о в ч е р е з вход Л , О ^ х , у ^ 8 , 0 < ! ^ 2 ^ 3 2 ) , получаем либо комбинацию — решение зада­ чи, л и б о о п р е д е л я е м о т с у т с т в и е р е ш е н и я . 6. О д и н из в о з м о ж н ы х а л г о р и т м о в р е ш е н и я з а д а ч и такой: 2 5 2 3 2 3 6 4 7 6 4 7 5 4 5 6 7 8 2х 2х 278 2у 2г
cUl cYml c[3] Рис. 36 1) П р е д п о л о ж и м , что с у щ е с т в у е т т е к с т , д е ш и ф р о в к а которого неоднозначна, следовательно, существует и т е к с т м и н и м а л ь н о й д л и н ы , д л я к о т о р о г о в о з м о ж н ы по меньшей мере две разбивки b[l]b [2]. ..Ь[к] = с[\]с [2]. ..с[т] на с л о в а м н о ж е с т в а А. П р е д с т а в л я я т е к с т в в и д е о т р е з ­ к а DE, эти р а з б и в к и мы м о ж е м и з о б р а з и т ь , к а к на р и ­ с у н к е 36. И з того, что т е к с т м и н и м а л ь н о й д л и н ы , с л е д у е т , что к о н ц ы с л о в в р а з н ы х р а з б и в к а х не могут л е ж а т ь на о д н о й в е р т и к а л и ( к р о м е к о н ц а т е к с т а ) . Т а к к а к Л [ 1J =т^с[1], то одно из к о д о в ы х с л о в ( н а п р и м е р , Ь[\\) д о л ж н о входить в другое в качестве префикса и представляться в в и д е с [l] = b [1] р [1], где р [1] — о с т а в ш а я с я ч а с т ь с л о ­ в а ( с у ф ф и к с ) . Д а л е е , л и б о р[1] входит в Ь [2] ( Ь [2] = = р[\]р[2]), л и б о Ь[2] входит в p[l] {р [1] = b [2] р [1]) в к а ч е с т в е п р е ф и к с а . О п р е д е л я е м н о в ы й с у ф ф и к с р [2]. Продолжая выделять префиксы и суффиксы, получаем, что на к а к о м - т о ш а г е р [/'] с о в п а д а е т с о д н и м из к о д о в ы х слов. Э т и р а с с у ж д е н и я я в л я ю т с я основой с л е д у ю щ е г о а л г о ­ ритма. Н а н у л е в о м ш а г е в о з ь м е м все п а р ы (а [г]; а [/], 1Ф ] т а к и х к о д о в ы х с л о в , что одно из них е с т ь п р е ф и к с д р у г о ­ го, и н а й д е м все с у ф ф и к с ы р [О, Щ. Н а / м ш а г е д л я всех п а р (p[j— 1, k]; а [/]), где одно из с л о в я в л я е т с я п р е ф и к с о м д р у г о г о , о п я т ь н а х о д и м все с у ф ф и к с ы , и т е из них, к о т о р ы е не п о я в л я л и с ь на п р е д ы ­ д у щ и х ш а г а х а л г о р и т м а , о б о з н а ч и м р [j, к]. 279
Эти ш а г и п о в т о р я е м л и б о до тех п о р , п о к а к а к о й - л и б о с у ф ф и к с не с о в п а д а е т с о д н и м из к о д о в ы х с л о в (и т о г д а с у щ е с т в у е т н е о д н о з н а ч н о д е к о д и р у е м ы й т е к с т ) , л и б о по­ к а на о ч е р е д н о м ш а г е не п о я в и т с я ни одного нового с у ф ф и к с а (и т о г д а д л я л ю б о г о т е к с т а с у щ е с т в у е т е д и н с т ­ венная дешифровка). Т а к к а к к о л и ч е с т в о к о д о в ы х с л о в о г р а н и ч е н о , то и с у ф ф и к с о в т а к ж е конечное ч и с л о , и на к а к о м - т о ш а г е алгоритм обязательно остановится. Этот а л г о р и т м в п е р в о н а ч а л ь н о м в а р и а н т е п р и н а д л е ­ ж и т А. С а р д и н а с у и Д ж . П а т т е р с о н у ( К и б е р н е т и ч е с к и й с б о р н и к . В ы п . 3. С. 9 3 — 1 0 2 ) . 2) Е с л и с у щ е с т в у е т т е к с т , к о т о р ы й при и с п о л ь з о в а н и и Л д е ш и ф р у е т с я н е о д н о з н а ч н о , то н а ч и н а е м в ы б р а с ы в а т ь из А с л о в а и их к о м б и н а ц и и , п ы т а я с ь п о л у ч и т ь мно­ ж е с т в о А' с м а к с и м а л ь н ы м ч и с л о м с л о в т а к о е , что все т е к с т ы , с о с т а в л е н н ы е из с л о в Л ' , д е ш и ф р у ю т с я одно­ значно. С н а ч а л а из Л у д а л я е м i-e с л о в о , i— 1, 2, п, и д е л а ­ ем п р о в е р к у по п у н к т у 1). Е с л и у д а л е н и е м одного с л о в а из Л мы не п о л у ч а е м и с к о м о г о м н о ж е с т в а Л ' , то т о г д а г е н е р и р у е м все с о ч е т а н и я по л — 2 с л о в а из м н о ж е с т в а Л и д л я к а ж д о г о полученного множества делаем провер­ ку по п у н к т у 1) и т. д. В о с п о л ь з у е м с я а л г о р и т м о м (5.2) г е н е р а ц и и с о ч е т а н и й no i с л о в из м н о ж е с т в а Л . 3) Э т о т п у н к т р е а л и з у е т с я с л е д у ю щ и м р е к у р с и в н ы м а л г о р и т м о м п о и с к а с в о з в р а щ е н и е м (все с л о в а м а с с и в а Л у п о р я д о ч е н ы по н о м е р а м ) : а ) е с л и с т р о к а п у с т а я , то о д н а из в о з м о ж н ы х де­ ш и ф р о в о к н а й д е н а , и н а ч е при р а з б о р е т е к с т а мы п р о в е р я е м a[i] ( п р и и з м е н е н и и г от 1 до п) на в х о ж д е н и е в н а ч а л о д е ш и ф р у е м о й в д а н н ы й мо­ мент строки. б) е с л и к а к о е - т о a[i] входит в с т р о к у к а к пре­ ф и к с , то з а п о м и н а е м н о м е р i этого с л о в а , з а т е м в ы д е л я е м с л о в о из с т р о к и , а с о с т а т к о м т е к с т а п р о и з в о д и м о п е р а ц и ю р а з б о р а по п у н к т у а ) . 280
Е с л и ни одно из a[i] не входит в к а ч е с т в е п р е ф и к с а в д е ш и ф р у е м у ю с е й ч а с с т р о к у , то о с у щ е с т в л я е м в о з в р а т на п у н к т а), п р е д в а р и т е л ь н о д о б а в л я я в н а ч а л о с т р о к и п о с л е д н е е у д а л е н н о е о т т у д а слово, и п ы т а е м с я в ы д е л и т ь из т е к с т а с л о в о с б о л ь ш и м н о м е р о м в А. Е с л и в о з в р а т осуществить невозможно (так как мы находимся в нача­ л е исходной с т р о к и ) , то а л г о р и т м з а к а н ч и в а е т с в о ю р а б о т у . Все в о з м о ж н ы е д е ш и ф р о в к и н а й д е н ы . Задача 1. Д о к а ж и т е с л е д у ю щ у ю т е о р е м у ( М а р ­ ков А. А.): Д л я однозначности декодировки текста достаточно в ы п о л н е н и я одного из д в у х с л е д у ю щ и х у с л о в и й : 1) не с у щ е с т в у е т ни одной п а р ы к о д о в ы х с л о в (a[i], [/])» » ' < > / ' , т а к о й , что о д н о из этих с л о в е с т ь префикс другого. 2) не с у щ е с т в у е т ни одной п а р ы к о д о в ы х с л о в (a[i], [/])> ' < > Л т а к о й , что одно из них е с т ь с у ф ф и к с другого. Задача 2. П р и в е д и т е п р и м е р т а к о г о м н о ж е с т в а к о д о в ы х с л о в , что д л я него не в ы п о л н я е т с я ни у с л о в и е 1, ни у с л о в и е 2 из з а д а ч и 1, а д е к о д и р о в к а л ю б о г о т е к с т а , с о с т а в л е н н о г о при п о м о щ и этих с л о в , — о д н о з н а ч н а я . а а
Приложения = у2-у1; = х1-х2; = -Х1*(у2-у1)+у1*(х2-х1); (1.1) P:=false; if (хЗ-х1 )*(у2-у1 )-(уЗ-у1 )*(х2-х1 )=0 then P:=true; (1.2) L:="no одну"; Z1 :=(хЗ-х1 )*(у2-у1 )-(уЗ-у1 )*(х2-х1); Z2:=(x4-x1 )*<у2-у1 )-(у4-у1 )*(х2-х1); if Z1*Z2<0 then L:="no р а з н ы е " ; (1.3) P:=true; Z1 :=(хЗ-х1)*(у2-у1 )-(уЗ-у 1 )*(x2-x1); Z2:=(x4-x1 )*(y2-y1 )-(y4-y1 )*(x2-x1); if Z1*Z2>0 then P:=false; Z3:=(x1 -хЗ)*(у4-уЗ)-(у1 -y3)*(x4-x3); Z4:=(x2-x3)*(y4-y3)-(y2-y3)*(x4-x3); if Z3*Z4>0 then P:=false; (1.4) A:=y2-y1; B:=x1-x2; C:=-x1 *(y2-y1 )+y1 *(x2-x1); T:=SQRT(A*A+B*B); D:=ABS((A*x3+B*y3+C)/T); (1.5) Ь:="Выпукль!Й" for i:=1 to n do begin j:=i mod n+1; k:=j m o d n+1; m:=i-1; if i=1 then
M:=N; Z1:=(X[M]-X[I]R(YU]-Y[I])-(Y[M]-Y[I]R(XD]-X[I]); Z2:=(X[K]-X[I]R(YU]-Y[I])-(Y[K]-Y[I])*(XG]-X[I]); IF 2 1 * Z 2 < 0 THEN 1_:="НЕВЫПУКЛЫЙ"; END; P:=(A+B+C)/2 S:=SQRT(P*(P-AR(P-B)*(P-C)); YMIN:=Y[1]; FOR K : = 2 TO N D O IF Y M I N > Y[K] THEN YMIN:=Y[K]; FOR K : = 1 TO N + 1 D O Y1[K]:=Y[K]-YMIN; S:=0; FOR K : = 1 TO N D O S : = S + { X [ I + 1 ] - X [ I ] ) * ( Y 1 [ I + 1 ] + Y 1 [I]); S:=ABS(S)/2; XMIN:=X[1]; FOR K : = 2 TO N D O IF X M I N > X[K] THEN XMIN:=X[K]; X:=XMIN-1; Y:=Y[0]; S:-0; (1.9) FOR I : = 1 TO N D O X BEGIN Z1:=(X[I]-X[0]R(Y-Y[0])-(Y[I]-Y[0]R(X-xt0]) Z2:=(X[I+1]-X[0]R(Y-Y[0])-(Y[I+1]-Y[0])*(X-X[0]) IF Z R Z 2 < 0 THEN S:=S+1; END; Ь:="ВНУТРИ"; IF S M O D 2 = 0 THEN L:="BHe"; 283
P:=false; f o r i:=1 t o N d o ifA[i]=Xthen P:=true; (2.1) K:=0; f o r i:=1 t o N d o if A [ i ] = X t h e n K:=i (2.2) i:=1; w h i l e (i<=n) a n d (A[i]<>X) i:=i+1 (2.3) A[N+1]:=X; i:=1; while (A[i]<>X) do i:=i+1 (2.4) K:=0; f o r i:=1 t o N d o if A [ i ] = X t h e n begin K:=K+1; B[K]:=i; end max:=A[1]; f o r i:=2 t o N d o if A [ i ] > m a x t h e n max:=A[i]; (2.5) (2.6) max:=A[1]; K:=1; f o r i:=2 t o N d o if A [ i ] > m a x t h e n begin rnax:=A[i]; K:=i; end; f o r i:=1 t o N-1 d o begin (2.7)
K:=I; MAX:=A[I]; FOR J : = I + 1 TO N D O (2.8) END; A[K]:=A[I]; A[I]:=MAX; END; FOR I : = 1 TO N - 1 DO FOR J : = 1 TO N - I D O IF A [ J ] < A [ J + 1 ] THEN BEGIN X:=AJJ]; (2.9) A[J]:=AD+1]; A[J+1]:=X; END; P:=TRUE; K:=N-1; WHILE P = T R U E D O BEGIN P:=FALSE; R:=K; FOR J : = 1 TO R D O IF A [ J ] < A [ J + 1 ] THEN BEGIN X:=A[J]; (2.Ю) A[J]:=AD+1]; A[J+1]:=X; P:=TRUE; K:=J; END; END; L=1; R:=N; P:=FALSE; WHILE ( L < = R ) AND ( P = F A L S E ) D O BEGIN M : = ( R + L ) DIV 2 ; IF A [ M ] = X THEN P:=TRUE 285
else if A[m]>X then L:=m+1 else R:=m-1; end; L=1; R:=N; while (L<R) do begin m:=(R+L) div 2; if A[m]>X then L:=m+1 else R:=m; end; if a[R]=X then p:=true else p:=false for i:=2 to n d o begin r:=i; l:=1; while (l<r) do begin m:=(l+r) div 2; if a[m]>a[i] then l:=m+1 else r:=m; end; k:=r; x:=a[i]; for j:=i d o w n t o k+1 do aD]:=aD-1]; a[k]:=x; end; Ai: = 1; Bi: = 1; Ci: = 1; while Ci< = N + M d o (2.11) (2.12) (2.13)
begin if A [ A i ] > B [ B i ] t h e n begin C[Ci]: = A[Ai]; Ai: = Ai + 1 end else begin C[Cij: = B[Bi]; Bi: = Bi + 1; end (2.14) Ci: = Ci + 1; if ( A i > N ) a n d ( C i < > N + M ) f o r i: = B i t o M then do begin C[Ci]: = B[i]; Ci: = Ci + 1; end; if ( B i > M ) a n d ( C i < > N + M ) f o r i: = A i t o N then do begin C[CiJ: = A[i]; Ci: = Ci + 1; end; end; { while } if a m o d b = 0 then р:='Делится' (3-1) else p:='He д е л и т с я ' ; р:='Простое'; B[1]:=1; B[2]:=a; К:=2; f o r i:=2 t o a-1 do if a m o d i = 0 t h e n ( - ) 3 2 begin K:=K+1; B[K]:=i; 287
р:='составное'; end; р:='простое'; for i:=2 t o t r u n c ( s q r t ( a ) ) + 1 d o if (a m o d i=0) a n d (i<a) t h e n р:='составное'; (33) р:='простое'; i:=2; w h i l e ( i < = t r u n c ( s q r t ( a ) ) + 1 ) a n d (a m o d i<>0) d o i:=i+1; (3.4) if (a m o d i=0) a n d (i<a) t h e n р:='составное'; n : = ( n + 1 ) div 2; B[1]:=2; for i:=2 t o n d o B[i]:= 2*i-1; j:=2; w h i l e j<=n d o begin ' J W; w h i l e i<=n d o begin B[i]:=0; i:=i+B0]; end; j:=j+1; w h i l e (B[j3=0) a n d (j<=n ) d o j:=j+1; end; | : = + B (3.5) b [ 1 ] : = 2 ; j : = 2 ; i:=3; w h i l e i<=n d o begin k:=1; d:=trunc(sqrt(i))+1; w h i l e (b[k]<=d) a n d (i m o d b[k]<>0) a n d (k<j) d o k:=k+1; ( 3 6 )
if b[k]>d then begin b[j]:=i; j:=j+1; end; i:=i+2; end; k:=0; d:=2; while a>1 do if a mod d=0 then begin k:=k+1; B[k]:=d; a:=a div d; end else if d=2 then d:=d+1 else d:=d+2; while a<>b d o if a>b then a:=a-b else b:=b-a; nod:=a; while (a<>0) and (b<>0) d o if a>b then a:=a mod b else b:=b mod a; if a=0 then nod:=b else nod:=a; (3.7) (3.8) (3.9) 289
к:=0; while N>=1 d o begin k:=k+1; B[kJ:=N mod 10; N:= N div 10; end; (3.10) k:=0; L:=N; while L>=1 do begin L:=L div 10; k:=k+1; end; m:=k; while N>=1 do begin B[k]:=N mod 10; N:=N div 10; k:=k-1; end; (3.11) a:=0; fori:=1 to N do a:=a*10+B[i]; (3.12) a:=0; r:=1; for i:=1 to N do begin a:=a+B[i]*r; r:=r*10; end; k:=0; while N>=1 do begin k:=k+1; B[k]:=N mod p; N:=N div p; end; (3.13) (3.14)
s:=0; г:=1; for i:=1 t o N d o begin s:=(s+B[i]*r) m o d m ; r:=r*10 m o d m end; if N>M t h e n K:=N else K:=M; K:=K+1; for i:=1 t o К d o C[i]:=0; for i:=1 t o К d o begin C[i]:=A[i]+B[i]+C[i]; if C [ i ] > = 1 0 t h e n begin C[i+1]:=C[i+1]+1; C[i]:=C[i] m o d 1 0 ; end; end; if C[K]=0 t h e n K:=K-1; for i:=1 t o N d o C[i]:=0; for i:=1 t o N d o begin C[i]:=A[i]-B[i]; if C[i]<0 t h e n begin C[i]:=C[i]+10; C[i+1]:=C[i+1]-1; end; end; w h i l e C[N]=0 d o N:=N-1; (3.15) (3.16) (3.17) 291
K:=M+N; for i:=1 to К d o C[i]:=0; for i:=1 t o M d o for j:=1 t o N d o C[i+j-1]:=Crj]*B[i]+C[i+j-1]; for i:=1 t o к d o begin C[i+1]:=C[i+1]+C[i] div 10; C[i]:=C[i] m o d 1 0 ; end; w h i l e C[k]=0 d o K:=K-1; S[0]:=0; fori:=1 to N d o S[il:=S[i-1]+a[i]; S[0]:=1; a[0]:=1; for i о т 1 t o N d o begin a[i]:=a[i-1]/x; S[i]:=S[i-1]+a[i]; end; F[0]:=1; F[1]:=1; for i:=2 t o N d o F[i]:=F[M]+F[i-2]; a:=1; b:=1; for i:=2 to N d o begin c:=b+a; a:=b; b:=c; end; (3.18) (4.1) (4- 2) (4. 3 ) (4. 4)
Р[0]:=1; for i:=1 t o N d o P[i]:=P[i-1]*a[i]; (4. 5) B[1,1]:=A[1,1]; forj:=2to6do for i:=2 t o 5 d o Bli.l^ma^BIi-I.IJ.AIi.l]); for i:=2 t o 5 d o forj:=2to6do begin B[i,j]=max(B[ij-1],B[i-1,j]); B[ij3=max(B[ij],A[i,j]); end; K[1]:=1; K[2]:=2; fori:=3to10do K[i]:=K[i-1]+K[i-2]; (4. 6) (4. 7) B[1,1]:=a[1,1]; for j:=2 t o 6 d o B[1,j]=A[1J]; for i:=2 t o 5 d o B[i,1]=A[«,1]; for i:=2 t o 5 d o for\:=2 to 6 do if A[i j ] = 1 t h e n begin B[i,j]=min(B[i,j-1],B[i-1J]); B[i,j]=min(B[i,j],B[i-1j-1])+1; end else B[ij]:=0; T[0,0]:=0; for j : - 1 t o 16 d o T[0,j]=0; for i:=1 t o 5 d o T[i,0]=0; (4. 9) 293
for i:=1 TO 5 D O do if j > = M [ i ] t h e n T[i,j]=max(T[M j],T[i-1 ,j-M[i]]+C[i]) else Ttij]=T[i-1,ji; FOR J - 1 TO 1 6 for t:-Q TO N D O p[']:=i; WHILE p[0]=0 D O BEGJN i:=1 TO n d o write(p[i]:3); writeln; J:=N; w h i l e p[j-1]>p[j] d o j:=j-1; k:=N; w h i l e pQ-1]>p[k] d o k:=k-1; d:=pQ-1]; PD-1]:=p[k]; P[k]:=d; for i:=j t o n d o r[i]:=p[N-<i-j)]; for i:=j t o n d o FOR P[']:=r[i]; end; for i;=1 TO m d o b[i]:=i; repeat for i:=1 t o m d o write(b[i]:3); writeln; j:=m; w h i l e (J>0) a n d (bD]>=n+j-m) d o j:=j-1; if j<>0 t h e n begin
ьШ:=ьш+1; for k:=j+1 t o m d o b[k]:=b[k-1]+1; end; until |=0; for i:=0 t o m d o A[i]:=0; w h i l e A[m]=0 d o begin i:=0; A[0]:=A[0]+1; w h i l e (A[i]=n) a n d (A[m] = 0) d o begin A[i]:=0; A[i+1]:=A[i+1]+1; i:=i+1; end; for i:=m-1 d o w n t o 0 d o write(A[i]/ '); writeln; end; w h i l e B[n]=0 d o begin i:=0; while (B[i]=1)do begin B[i]:=0; i=i+1; end; B[i]:=1; for i:=0 t o n-1 d o write(B[i],''); writeln; end; (5.3) (5-4) summa:=0; for i:=1 t o n d o summa :-summa+a[i] 295
otvet:='H.eT р е ш е н и я ' if s u m m a mod 2 = 1 t h e n writelnfHeT решения') else begin s u m m a : = s u m m a div 2; for i:=1 t o n-1 d o for j:=i+1 to n d o if a[i]<aQ] then begin k:=a[i]; а[П:=аП]; aD]:=k; end; st[0]:=1; st[1]:=1; s:=a[1]; i:=st[1]+1; if a[1]>summa then begin otvet:='HeT р е ш е н и я ' ; st[1]:=0; end; if a[1]=summa then begin otvet:='ecTb решения'; writeln(a[1]); end: while (st[1]=1) and ( o t v e t = ' H e T решения') d o begin while (i<=n) and ( o t v e t - ' н е т решения') d o begin {while} s:=s+a[i]; if s = s u m m a then begin writeln; writelnfpeujeHMe:'); for j:=1 to s t a c k [ 0 ] d o write(a[stackfj]]'8); writeln(a[i]:8); writeln(ss,' ',s);
halt; end else begin if s < s u m m a t h e n begin st[0]:=st[0]+1; st[st[0]]:=i; end else s:=s-a[i]; i:=i+1; end; e n d ; {while} i:=st[st[0]]+1; s:=s-a[st[st[0]]]; st[0]:=st[0]-1; end; { stack[1]} writeln; writeln('HeT р е ш е н и я . ' ) ; end; {else}
СОДЕРЖАНИЕ От авторов Глава 1. Уравнение прямой § 1. Прямые и отрезки на плоскости 1.1. Формы записи уравнения прямой 1.2. Положение точек относительно прямой 1.3. Взаимное расположение двух отрезков 1.4. Точка пересечения отрезков § 2. Расстояние на плоскости 2.1. Расстояние между точками. Расстояние от точки до пря­ мой 2.2. Расстояние между точкой и отрезком § 3. Многоугольники 3.1. Виды многоугольников 3.2. Выпуклость многоугольников § 4. Площади фигур 4.1. Площадь треугольника 4.2. Площадь прямоугольника 4.3. Площадь трапеции 4.4. Площадь плоского многоугольника § 5. Взаимное расположение фигур на плоскости 5.1. Взаимное расположение многоугольника и точки . . 5.2. Взаимное расположение многоугольников Задачи для повторения Задачи повышенной сложности * . . . Задачи для самостоятельного решения Указания к решению задач повышенной сложности . . . Глава 2. Поиск и сортировки § 1. Последовательный поиск необходимого элемента в массиве § 2. Поиск максимального и минимального элементов в массиве § 3. Упорядочение элементов массива 3.1. Сортировка выбором 3.2. Сортировка обменом § 4. Сокращение области поиска. Двоичный поиск 298
§ 5*. Другие виды сортировок 5.1. Сортировка вставками 5.2. Сортировка слияниями Задачи для повторения Задачи повышенной сложности Задачи для самостоятельного решения Указания к решению задач повышенной сложности Глава 3. Алгоритмы целочисленной . . 81 — 83 85 90 94 . . . 98 арифметики § 1. Поиск делителей числа. Простые числа 116 § 2. Разложение числа на простые множители 122 § 3. Поиск наибольшего общего делителя (НОД) и наименьшего общего кратного (НОК) 125 3.1. Поиск НОД — 3.2. Поиск НОК 128 § 4. Представление чисел. Выделение цифр числа 129 4.1. Преобразование числа из обычного представления в таб­ личное 130 4.2. Преобразование табличного представления числа в обыч­ ное 132 § 5. Перевод чисел из одной системы счисления в другую . . 134 § 6. Делимость чисел 136 § 7. Действия с многозначными (большими) числами . . . . 139 7.1. Сложение многозначных чисел — 7.2. Вычитание многозначных чисел 141 7.3*. Произведение многозначных чисел 142 Задачи для повторения 143 Задачи повышенной сложности 149 Задачи для самостоятельного решения 154 Указания к решению задач повышенной сложности . . . 159 Глава 4. Рекуррентные соотношения и динамическое программиро­ вание § § § § § 1. 2. 3. 4. 5. Понятие задачи и подзадачи Сведение задачи к подзадачам Понятие рекуррентного соотношения Правильные рекуррентные соотношения Способ организации таблиц 5.1. Организация одномерных таблиц 5.2. Организация двумерных таблиц § 6. Способ вычисления элементов таблицы 6.1. Вычисление элементов одномерной таблицы . . . . 6.2. Вычисление элементов двумерной таблицы 6.3. Вычисление элементов двумерной таблицы с дополни­ тельными ограничениями 176 178 179 182 184 185 186 188 — 190 192 299
Задачи для повторения Задачи повышенной сложности Задачи для самостоятельного решения Указания к решению задач повышенной сложности . . 195 198 202 . 208 Г ЛАВА 5. Задачи комбинаторики § 1. Соединения 1.1. Перестановки 1.2. Сочетания 1.3*. Размещения § 2*. Соединения с повторениями 2.1. Размещения с повторениями 2.2. Перестановки с повторениями 2.3. Сочетания с повторениями § 3*. Подмножества § 4. Реализация перебора вариантов. Сокращение перебора Задачи для повторения Задачи повышенной сложности Задачи для самостоятельного решения Указания к решению задач повышенной сложности . Приложения . 236 — 240 242 244 — 246 247 249 . 251 260 262 266 . 275 282
Учебное издание Котов Владимир Михайлович Волков Игорь Анатольевич Лапо Анжелика Ивановна ИНФОРМАТИКА Методы алгоритмизации Учебное пособие для 8—9 классов общеобразовательной школы с углубленным изучением информатики с русским языком обучения Редактор Н. Г. Левчук. Художественный редактор Л. В. Технический редактор С. И. Лицкевич. Корректоры 3. Н. С. А. Янович. Павленко. Гришели, Сдано в набор 29.08.2000. Подписано в печать 16.10.2000. Бумага офсетная № 1. Формат 8 4 Х М 8 ' / з 2 . Гарнитура литературная. Высокая печать с ФПФ. Усл.-печ. л. 15,96. Усл. кр.-отт. 16,38. Уч.-изд. л. 12,12. Тираж 28 100 экз. Заказ 1566. Налоговая льгота — Общегосударственный классификатор Республики Беларусь ОКРБ-98, ч. 1; 22.11.20.100. Издательское республиканское унитарное предприятие «Народная асвета» Государственного комитета Республики Беларусь по печати. Лицензия ЛВ № 4 от 08.09.2000. 220600, Минск, проспект Машерова, 11. Республиканское унитарное предприятие «Полиграфический комбинат имени Я. Коласа». 220600, Минск, Красная, 23.
К95 К о т о в В. М. и д р . И н ф о р м а т и к а . М е т о д ы а л г о р и т м и з а ц и и : Учеб. пособие д л я 8—9-х к л . о б щ е о б р а з о в а т . шк. с у г л у б л . и з у ч е н и е м и н ф о р м а т и к и с рус. я з ы к о м о б у ч е н и я / В. М . К о т о в , И. А. В о л к о в , А. И. Л а п о . — Мн.: Н а р . а с в е т а , 2 0 0 0 . — 3 0 0 с : ил. I S B N 985-12-0259-2 УДК |002.6-Ь681.3] (075.3=82) ББК 32.81 я721.6