Автор | Сообщение |
|
| Администратор
|
Сообщение: 2688
|
|
Отправлено: 11.04.21 22:04. Заголовок: ЕГЭ-24 задание 165
Татьяна Александровна пишет: цитата: | посмотрите пожалуйста в ЕГЭ-24 задание 165 abc = "" for i in range(26): abc += chr(65 + i) f = open("24-164.txt") maxi = 0 s_max = '' for s in f: count = 0 for i in range(0, len(s) - 1): if s[ i] == s[i+1]: count += 1 if count > maxi: maxi, s_max = count, s f.close() maxi = 0 for letter in abc: count = s_max.count(letter) if count > maxi: maxi, answer = count, letter count = 0 f = open("24-164.txt") for s in f: count += s.count(answer) print(answer, count, sep ='') |
|
Насколько я понимаю, вы считаете не длину самой длинной цепочки стоящих рядом одинаковых символов, а количество пар одинаковых соседних символов. Это не одно и то же.
|
|
|
Ответов - 10
[только новые]
|
|
|
Отправлено: 11.04.21 23:13. Заголовок: Большое спасибо, Вы ..
Большое спасибо, Вы правы. Добавление двух строчек всё исправило.
|
|
|
|
Отправлено: 14.04.21 13:18. Заголовок: 165
Константин Юрьевич, уважаемые коллеги, добрый день! Большая просьба. Напишите решение задачи 165 на Паскале.
|
|
|
|
| Администратор
|
Сообщение: 2700
|
|
Отправлено: 14.04.21 13:50. Заголовок: Андреев пишет: Больш..
Андреев пишет: цитата: | Большая просьба. Напишите решение задачи 165 на Паскале. |
|
Пожалуйста: ## var ABC := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; var data := ReadLines('24-164.txt').ToArray; var maxK := 0; var letterMax := ''; foreach var s in data do begin var (k, currK) := (1, 1); for var i:=2 to length(s) do if s[ i] = s[i-1] then begin currK += 1; k := max(k, currK); end else currK := 1; if k > maxK then begin maxK := k; var ma := 0; foreach var letter in ABC do begin var cnt := s.CountOf(letter); if cnt > ma then (ma, letterMax) := (cnt, letter); end; end; end; Print( letterMax ); data.Select( s->s.Count(x->x=letterMax)).Sum.Println; Проверялось в последней версии PascalABC.NET (3.8).
|
|
|
|
Отправлено: 15.04.21 09:00. Заголовок: Если это задача №378..
Если это задача №3786, то там данный код действительно выдает приведенный в задаче ответ, определяя, что самая длинная цепочка состоит из букв К. Но на деле там этих К максимум 7, в то время как можно найти цепочку из 10 букв М.
|
|
|
|
| Администратор
|
Сообщение: 2704
|
|
Отправлено: 15.04.21 09:25. Заголовок: Alex61 пишет: Если э..
Alex61 пишет: цитата: | Если это задача №3786, то там данный код действительно выдает приведенный в задаче ответ, определяя, что самая длинная цепочка состоит из букв К. Но на деле там этих К максимум 7, в то время как можно найти цепочку из 10 букв М. |
|
В чем ошибка в решении, на ваш взгляд?
|
|
|
|
| Администратор
|
Сообщение: 2706
|
|
Отправлено: 15.04.21 13:01. Заголовок: Alex61 пишет: опреде..
Alex61 пишет: цитата: | определяя, что самая длинная цепочка состоит из букв К |
|
Там другое условие. цитата: | Но на деле там этих К максимум 7, в то время как можно найти цепочку из 10 букв М. |
|
И в той строке, где 10 подряд букв M, чаще всего встречается буква K.
|
|
|
|
Отправлено: 15.04.21 15:08. Заголовок: Ну если условие друг..
Ну если условие другое, все может быть. А 3786 решается в три строчки. Регулярка (.)\1* делает основную часть работы.
|
|
|
|
| Администратор
|
Сообщение: 2707
|
|
Отправлено: 15.04.21 15:13. Заголовок: Alex61 пишет: Ну есл..
Alex61 пишет: цитата: | Ну если условие другое, все может быть. |
|
Вот условие 3786: цитата: | Необходимо найти строку, содержащую самую длинную цепочку стоящих подряд одинаковых букв. Если таких строк несколько, надо взять ту, которая в файле встретилась раньше. Определите, какая буква встречается в этой строке чаще всего. |
|
То есть, самая длинная цепочка одинаковых символов может состоять из букв M, а встречается чаще всего в этой строке буква К.
|
|
|
|
Отправлено: 15.04.21 18:59. Заголовок: Навскидку если, можн..
Навскидку если, можно еще вот так написать ## var a := ReadAllLines('24-164.txt'); var n := a.Select(s -> s.MatchValues('(.)(\1)*').Select(ss -> (ss[1], ss.Length)) .MaxBy(t -> t[1])).Numerate.MaxBy(t -> t[1][1])[0]; var c := a[n-1].GroupBy(x -> x).OrderByDescending(t -> t.Count).EachCount.First.Key; Print(c, a.Select(s -> s.CountOf(c)).Sum)
|
|
|
|
Отправлено: 06.06.21 18:45. Заголовок: вот моё решение 165 ..
вот моё решение 165 на Паскале var n,i,k: integer; max:longint; a,b: array['A'..'Z'] of integer; c,maxc: char; s: string; f: text; begin k:=0; n:=0; for c:='A' to 'Z' do begin a[c]:=0; b[c]:=0; end; assign(f, '24-164.txt'); reset(f); while not eof(f) do begin readln(f,s); var maxLen:=1; var curLen:=1; for i:=2 to Length(s) do begin if (s = s[i-1]) then begin curLen+=1; if (maxLen<curLen)then maxLen:=curLen; end else curLen:=1; end; for i:=1 to Length(s) do begin a[s]:=a[s]+1; b[s]:=b[s]+1; end; if (maxLen>n)then begin n:=maxLen; max:=0; for c:='A' to 'Z' do if (a[c]>max)and (a[c]>0) then begin max:=a[c]; maxc:=c; end; end else for c:='A' to 'Z' do a[c]:=0; end; writeln(maxc, b[maxc]); close(f); end.
|
|
|
|