Задания
Версия для печати и копирования в MS Word

Тек­сто­вый файл со­дер­жит толь­ко за­глав­ные буквы ла­тин­ско­го ал­фа­ви­та (ABCZ). Опре­де­ли­те мак­си­маль­ное ко­ли­че­ство иду­щих под­ряд сим­во­лов, среди ко­то­рых не более одной буквы A.

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

За­да­ние 24

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

Ре­ше­ние.

Будем по­сим­воль­но счи­ты­вать файл. Каж­дую ите­ра­цию цикла while будем уве­ли­чи­вать счётчик k на еди­ни­цу и ис­поль­зо­вать её как ин­декс. Если оче­ред­ной счи­тан­ный сим­вол не яв­ля­ет­ся бук­вой A  — будем уве­ли­чи­вать счётчик count на еди­ни­цу. Также будем про­ве­рять, боль­ше ли те­ку­щее зна­че­ние счётчика count зна­че­ния пе­ре­мен­ной maxlen. Если усло­вие вы­пол­ня­ет­ся, будем об­нов­лять зна­че­ние пе­ре­мен­ной maxlen  — это ис­ко­мое зна­че­ние.

Если будет встре­че­на буква A, будем про­ве­рять, встре­че­на ли она в пер­вый раз. Если до этого букв A в те­ку­щей по­сле­до­ва­тель­но­сти не встре­ча­лось, будем за­по­ми­нать те­ку­щую по­зи­цию буквы A и про­дол­жать уве­ли­чи­вать зна­че­ние счётчика count. Если буква A в те­ку­щей по­сле­до­ва­тель­но­сти встре­ча­ет­ся во вто­рой раз, будем при­сва­и­вать зна­че­нию счётчика count раз­ность те­ку­щей ите­ра­ции цикла while и ин­дек­са пер­вой встре­чен­ной буквы A  — таким об­ра­зом будем учи­ты­вать и по­сле­до­ва­тель­ность, на­чав­шу­ю­ся от преды­ду­щей встре­чен­ной буквы A. Также в этом слу­чае об­но­вим зна­че­ние пе­ре­мен­ной i, от­ве­ча­ю­щей за хра­не­ние ин­дек­са по­след­ней встре­чен­ной буквы A.

 

При­ведём ре­ше­ние дан­ной за­да­чи на языке PascalABC.

var

i, count, maxlen, countA, k: integer;

c: char;

f: text;

begin

assign(f,'C:\24.txt');

reset(f);

maxlen := 0;

count := 0;

countA := 0;

k := 0;

while not eof(f) do begin

read(f, c);

k := k + 1;

if c <> 'A' then begin

count := count + 1;

if count > maxlen then maxlen := count;

end

else if countA = 0 then begin

countA := 1;

i := k;

count := count + 1;

if count > maxlen then maxlen := count;

end

else if countA = 1 then begin

count := k - i;

i := k;

if count > maxlen then maxlen := count;

end;

end;

writeln(maxlen);

end.

 

В ре­зуль­та­те ра­бо­ты дан­но­го ал­го­рит­ма при вводе дан­ных из файла в усло­вии по­лу­ча­ем ответ  — 337.

 

Ответ: 337.

 

При­ведём ре­ше­ние Вик­то­ра Кима на языке Python.

f = open("24.txt")

x = f.read()

count = count_old = m = 0

for i in x:

if i == "A":

m = max(m, count + count_old + 1)

count_old = count

count = 0

else:

count += 1

m = max(m, count + count_old + 1)

print(m)

 

При­ме­ча­ние. Путь к файлу не­об­хо­ди­мо ука­зать со­глас­но рас­по­ло­же­нию файла на Вашем ком­пью­те­ре.

 

При­ведём ре­ше­ние Бо­ри­са Са­ве­лье­ва на языке Python.

f = open('24.txt')

ans = 0

s = f.readline().split('A')

for i in range (len(s)-1):

ans = max(len(s[i])+len(s[i+1])+1,ans)

print(ans)


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

Раздел кодификатора ФИПИ: