Форум » Обработка символьных строк » Ошибка в задании 3357 » Ответить

Ошибка в задании 3357

Мусульманин: В задании неправильный ответ, верный ответ 6, а не 8, проверял на двух ЯП

Ответов - 13

Поляков: Показывайте программу.

Мусульманин: не знаю как здесь сделать табы грамотно [pre2] maxim, k = 1, 1 with open("24.txt") as t: a = t.readline() for i in range(1, len(a)): if a[ i] > a[i - 1]: k += 1 maxim = max(maxim, k) else: k = 1 print(maxim)[/pre2]

Поляков: В задании спрашивают про убывающую последовательность, а вы нашли возрастающую. Знак разверните наоборот в условном операторе.


сдающий: [pre2] var f:text; s:string; max,i,k:integer; Begin assign(f,'24.txt'); reset(f); Readln(f,s); for i:=1 to length(s)-1 do begin if ord(s[ i])>ord(s[i+1]) then k:=k+1 else begin If max<k then max:=k; k:=0; end; end; Writeln(max); end.[/pre2]

Поляков: Длина последовательности, по крайней мере, равна 1, а не 0.

сдающий: [pre2] var f:text; s:string; max,i,k:integer; Begin assign(f,'24.txt'); reset(f); Readln(f,s); k:=1; for i:=1 to length(s)-1 do begin if ord(s[ i])>ord(s[i+1]) then k:=k+1 else begin If max<k then max:=k; k:=1; end; end; Writeln(max); end.[/pre2]

Поляков: Что происходит, если нужная последовательность в самом конце строки?

сдающий: Если цикл развернуть, то получается. А есть ли вариант без разварота цикла? Ведь в таком случае, если последовательность в начале, мы потеряем. var f:text; s:string; max,i,k:integer; Begin assign(f,'24.txt'); reset(f); Readln(f,s); k:=1; for i:= length(s)downto 2 do begin if ord(s)<ord(s[i-1]) then k:=k+1 else begin If max<k then max:=k; k:=1; end; end; Writeln(max); end.

Поляков: сдающий пишет: А есть ли вариант без разварота цикла? Конечно. Посмотрите решение на Питоне.

сдающий: Я так понимаю ,что ошибка у меня в границах. На питоне (я его не знаю((( ) вроде написано, что i изменяется от 1 до длинны строки for i in range(1, len(a)): if a[ i] > a[i - 1]: Но если я пишу for i:=1 to length(s) do begin if ord(s)<ord(s[i-1]) then k:=k+1 else begin If max<k then max:=k; k:=1; end; Программа выдает ошибку, выхода за границы массива. И выполняя сдвиг в ту или другую сторону, ошибка остается ((((

Поляков: сдающий пишет: Я так понимаю ,что ошибка у меня в границах Посмотрите, в какой момент обновляется переменная max у вас, и в какой момент - в программе на Питоне (как только изменилось k). Сделайте так же.

сдающий: var f:text; s:string; max,i,k:integer; Begin assign(f,'24.txt'); reset(f); Readln(f,s); k:=1; for i:=2 to length(s) do begin if ord(s)<ord(s[i-1]) then k:=k+1 else begin If max<k then max:=k; k:=1; end; end; Writeln(max); end.

сдающий: var f:text; s:string; max,i,k:integer; Begin assign(f,'24.txt'); reset(f); Readln(f,s); k:=1; max:=1; for i:=2 to length(s) do begin if ord(s)<ord(s[i-1]) then begin k:=k+1; If max<k then max:=k end else k:=1; end; Writeln(max); end. Спасибо за подсказки! Получилось, в последнем прохождении цикла к=8 а иначе не выполняется, и мах не меняется))



полная версия страницы