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

Тек­сто­вый файл со­дер­жит стро­ки раз­лич­ной длины. Общий объём файла не пре­вы­ша­ет 1 Мбайт. Стро­ки со­дер­жат толь­ко за­глав­ные буквы ла­тин­ско­го ал­фа­ви­та (ABCZ).

Не­об­хо­ди­мо найти стро­ку, со­дер­жа­щую наи­мень­шее ко­ли­че­ство букв G (если таких строк не­сколь­ко, надо взять ту, ко­то­рая на­хо­дит­ся в файле рань­ше), и опре­де­лить, какая буква встре­ча­ет­ся в этой стро­ке чаще всего. Если таких букв не­сколь­ко, надо взять ту, ко­то­рая позже стоит в ал­фа­ви­те.

При­мер. Ис­ход­ный файл:

GIGA

GABLAB

AGAAA

В этом при­ме­ре в пер­вой стро­ке две буквы G, во вто­рой и тре­тьей  — по одной. Берём вто­рую стро­ку, так как она на­хо­дит­ся в файле рань­ше. В этой стро­ке чаще дру­гих встре­ча­ют­ся буквы A и B (по два раза), вы­би­ра­ем букву B, так как она позже стоит в ал­фа­ви­те. В от­ве­те для этого при­ме­ра надо за­пи­сать B.

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

За­да­ние 24

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

Ре­ше­ние.

Для ре­ше­ния этой за­да­чи объ­явим мас­сив arr, в ко­то­ром будем счи­тать ко­ли­че­ство каж­до­го сим­во­ла в стро­ке, пе­ре­мен­ную min, в ко­то­рой будем хра­нить ми­ни­маль­ное най­ден­ное ко­ли­че­ство сим­во­лов G в какой-⁠либо стро­ке, пе­ре­мен­ную countG, в ко­то­рую будем за­пи­сы­вать ко­ли­че­ство сим­во­лов G в оче­ред­ной счи­тан­ной стро­ке. По­сле­до­ва­тель­но счи­ты­вая стро­ки, будем счи­тать в них ко­ли­че­ство сим­во­лов G и за­пи­сы­вать это ко­ли­че­ство в пе­ре­мен­ную countG. Также будем счи­тать в оче­ред­ной счи­тан­ной стро­ке ко­ли­че­ство каж­до­го от­дель­но­го сим­во­ла с по­мо­щью мас­си­ва arr. Если зна­че­ние пе­ре­мен­ной countG ока­жет­ся мень­ше те­ку­ще­го зна­че­ния пе­ре­мен­ной min, будем на­хо­дить мак­си­маль­ное зна­че­ние эле­мен­та мас­си­ва arr и сим­вол, со­от­вет­ству­ю­щий этому зна­че­нию. Если в стро­ке будет встре­че­но оди­на­ко­вое ко­ли­че­ство двух раз­ных сим­во­лов, не­об­хо­ди­мо в пе­ре­мен­ную res за­пи­сать тот сим­вол, ко­то­рый со­глас­но ал­фа­ви­ту идёт позже. Для этого при по­ис­ке мак­си­маль­но­го зна­че­ния эле­мен­та мас­си­ва ис­поль­зу­ем усло­вие «maxC <= arr[j]».

 

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

var

arr: array ['A'..'Z'] of integer;

i, min, countG, maxC: integer;

j, res: char;

str: string;

f: text;

begin

min := 100000;

maxC := 0;

countG := 0;

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

reset(f);

for j := 'A' to 'Z' do arr[j] := 0;

while not eof(f) do begin

readln(f, str);

for i:= 1 to str.Length do begin

if (str[i] = 'G') then countG := countG + 1;

arr[str[i]] := arr[str[i]] + 1;

end;

if min > countG then begin

min := countG;

maxC := 0;

for j := 'A' to 'Z' do begin

if (maxC <= arr[j]) then begin

maxC := arr[j];

res := j;

end;

end;

end;

for j := 'A' to 'Z' do arr[j] := 0;

countG := 0;

end;

writeln(res);

end.

 

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

 

Ответ: T.

 

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

 

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

file = open("24.txt", "r")

a = [10**6]*91

for i in range(1000):

st = file.readline()

d = [0]*91

for j in range(len(st)):

d[ord(st[j])] += 1

if d[71] < a[71]:

for k in range(len(d)):

a[k] = d[k]

mx = 0

for i in range(len(a)):

if a[i] >= mx:

mx = a[i]

mxchar = chr(i)

print(mxchar)

 

При­ведём ре­ше­ние Фе­фе­ло­ва Сер­гея на языке Python.

file = open("24 (3).txt", "r")

dg = {'G':10**6}

for st in file:

d = {}

for sym in st:

if sym in d:

d[sym] += 1

else:

d[sym] = 1

if d['G'] < dg['G']:

dg = d

print(max(dg, key=dg.get))

 

При­ведём ре­ше­ние Сте­па­на Чер­няв­ско­го на языке Python.

from collections import Counter

f = open('24.txt').readlines()

mn = 10**20

temp = ''

for i in f:

if i.count('G') < mn:

mn = i.count('G')

temp = Counter(i).most_common()[0][0]

print(temp)

 

При­ведём ре­ше­ние Юрия Лы­са­ко­ва на языке Python.

f = open('24.txt')

a = [str(i) for i in f]

mini = 1000000

for i in range(len(a)):

k = a[i].count('G')

if k < mini:

mini = k

t = i

print(max(set(a[t]),key = a[t].count))

 

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

s = open('24.txt').readlines()

c = []

for i in range(0, len(s)):

g = s[i].count('G')

c.append(g)

s = s[c.index(min(c))] # берём стро­ку с ми­ни­маль­ным кол-вом 'G'

c = {}

for i in range(0, len(s)):

if not s[i] in c: c[ s[i] ] = 0

c[ s[i] ] += 1

print(max(c, key=c.get))

 

При­ведём ре­ше­ние Ми­ха­и­ла Глин­ско­го на языке Python.

f = open('24.txt')

kG = 10**10

for s in f:

if s.count('G') < kG:

kG = s.count('G')

m = [str(i) for i in s]

al = 'QWERTYUIOPASDFGHJKLZXCVBNM'

kb = 0

for i in al:

if m.count(i) > kb:

kb = m.count(i)

B = i

print(B)

 

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

a = [s for s in open('24.txt')]

ming = min([s.count('G') for s in a])

line = [s for s in a if s.count('G')==ming][0]

maxlet = max([line.count(c) for c in line])

print(sorted([c for c in set(line) if line.count(c) == maxlet])[-1])


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

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