|
|
busiki47.PAS |
|
{* Задача 48 *}Unit BUSIKI47;Interface Implementation Begin writeln('Имеются бусы, состоящие из N бусинок, некотрые из которых красного или голубого цвета, а остальные - белые. Конфигурация бус задается последовательностью цветов бусинок("b"-голубая,"r"-красная,"w"- белая), начиная с бусинки №1. Порвем бусы и начнем снимать бусинки одного цвета с певого конца, пока не встретится бусинка другого цвета. То же самое проделаем со вторым концом бусинки. Белая бусинка рассматривается как бусинка карасного или голубого цвета по ситуации, то есть может сниматься и с голубыми и красными. Бусы могут не содержать бусинок красного или голубого цвета. Требуется определить точку такого разрыва данных бус, при котором суммарное количество бусинок, собранных с обеих концов максимально. нужно вывести максимальное количество снятых бус и номера бусинок, между которыми точка разрыва. например: NECKLACE.IN NECKLACE.OUT bwrbrbrbwb 6 7 8'); End. Program busiki47; Uses busiki47.pas; {* Эту строку можно удалить *} Uses crt; {* Подключаем внешние файлы *} Const {* Постоянные значения *} ok = false; Var {* Объявление переменных *} a : Array[1..50] Of String; i : byte; j : byte; bus : byte; nowkol : byte; nowkor : byte; maxkol : byte; kor1 : byte; kor2 : byte; c1 : String; c2 : String; Begin clrscr; {* Очищаем экран *} randomize; textcolor(yellow); {* текст *} write('Kolichestvo businok: '); readln(bus); For i := 1 To bus Do {randomnoe zapolnenie i raspechatka} Begin Case random(3) Of 0: Begin a[i] := 'b'; textcolor(lightblue); {* Выбрать цвет текста *} End; 1: Begin a[i] := 'r'; textcolor(lightred); {* текст *} End; 2: Begin a[i] := 'w'; textcolor(white); {* текст *} End; End; write(a[i]); End; For i := 1 To bus Do {perebor razrivov} Begin nowkol := 0; c1 := ''; c2 := ''; If i - 1 = 0 Then nowkor := bus Else nowkor := i - 1; j := nowkor; While oktrue Do {perebor vlevo} Begin If nowkol = bus Then break; If (a[j]'w') And (c1 = '') Then c1 := a[j]; If (a[j] = 'w') Or (a[j] = c1) Then inc(nowkol); {* Увеличиваем nowkol на 1 *} If (a[j]'w') And (a[j]c1) Then break; dec(j); {* j-- *} If j = 0 Then j := bus; End; j := i; While oktrue Do {perebor vpravo} Begin If nowkol = bus Then break; If (a[j]'w') And (c2 = '') Then c2 := a[j]; If (a[j] = 'w') Or (a[j] = c2) Then inc(nowkol); {* nowkol++ *} If (a[j]'w') And (a[j]c2) Then break; inc(j); {* Прибавим к j единицу *} If j = bus + 1 Then j := 1; End; If nowkol > maxkol Then {zapisivanie novih dannih} Begin maxkol := nowkol; kor1 := nowkor; kor2 := i; End; End; writeln; {* Пустая строка *} For i := 1 To bus Do {vizualnii razriv} Begin If i = kor2 Then Begin textcolor(yellow); {* Выбрать цвет текста *} write('_'); End; If a[i] = 'b' Then textcolor(lightblue) {* Выбрать цвет текста *} Else If a[i] = 'r' Then textcolor(lightred) {* текст *} Else textcolor(white); {* текст *} write(a[i]); End; writeln; {* Пустая строка *} textcolor(yellow); {* текст *} write(maxkol, ' ', kor1, '-', kor2); {itog} readkey; {* Ждем нажатия пользователя *} End.... 07.08.2014 - Breakpoint - точка остановки 07.08.2014 - Топ-10 самых популярных приложений в Facebook 18.11.2013 - Панель управления и персонализация системы. Windows Vista 18.11.2013 - Логические и физические диски. Windows Vista 18.11.2013 - Удаление файлов и папок 01.11.2013 - Программирование дисковых подсистем: возможности 31.10.2013 - Windows8 или Windows7? 31.10.2013 - Windows8, игры |
|
Non-commercial fansite
|