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

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

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

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

NINA

NABLAB

ANAAA

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

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

За­да­ние 24

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

Ре­ше­ние.

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

 

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

var

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

i, min, countN, maxC: integer;

j, res: char;

str: string;

f: text;

begin

min := 100000;

maxC := 0;

countN := 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] = 'N') then countN := countN + 1;

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

end;

if min > countN then begin

min := countN;

maxC := 0;

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

if (maxC <= arr[j]) and (j <> 'N') then begin

maxC := arr[j];

res := j;

end;

end;

end;

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

countN := 0;

end;

writeln(res);

end.

 

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

 

Ответ: Y.

 

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

 

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

f = open("24.txt")

s = f.readlines()

a = [0] * 26

min = 100000000

maxi = 0

for i in range(len(s)):

str = s[i]

if str.count('N') < min:

min = str.count('N')

s1 = str

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

a[ord(s1[i]) - 65] += 1

for i in range(26):

if a[i] >= maxi:

maxi = a[i]

index = i

print(chr(index + 65))

 

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

f = open('24.txt')

a = f.readlines()

r = [i.count('N') for i in a]

r1 = r.index(min(r))

b = a[r1]

t = b.count(max(set(b),key = b.count))

c = [chr(i) for i in range(65,91)]

c.reverse()

for i in c:

if b.count(i) == t:

print(i)

break

 

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

from statistics import mode

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

s1 = [i.count('N') for i in s]

print(mode(s[s1.index(min(s1))]))

 

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

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

c = []

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

n = s[i].count('N')

c.append(n)

s = s[c.index(min(c))]

c = {}

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

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

c[ s[i] ] += 1

c = dict(sorted(c.items(), reverse=True))

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

 

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

import collections

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

q=[x.count('N') for x in f]

s=f[q.index(min(q))]

print(collections.Counter(s))

 

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

a=sorted([s for s in open('24.txt')],key=lambda x: x.count('N'))

b=sorted([(a[0].count(c),c) for c in set(a[0])])

print(b[-1][1])


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

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