Если считать что у племени мульти в алфавите не 17, а 16 символов, то задача решается так: На 1 символ у племени мульти требуется log₂16 = 4 бита На сообщение из 100 символов - 100*4 = 400 бит Для племени пульти получится соответственно log₂32=5 бит, на все сообщение 50*5=250 бит Сравниваем: 400 бит > 250 бит Если в задаче 17, а не 16, то значение логарифма получится не целым (4.08746284125), можно это значение дальше и подставлять. Если считать, что каждый символ кодируется целым числом бит, то на 1 символ у племени мульти потребуется также 5 бит (округление выполняют всегда в большую сторону). Остальные расчеты делаются аналогично
Const Letters = ['a'..'z', 'A'..'Z']; LineEnds = [#13, #10, #0, '.']; MAX_LEN = 255; var txt: array [0..MAX_LEN] of char; bnd: array [0..MAX_LEN, 0..1] of integer; tsz, bsz: integer; // размеры массивов isLetter, isWord, f1, f2: boolean; i, j: integer; begin repeat read(txt[tsz]);
// Определение границ слов isLetter := txt[tsz] in Letters; if isLetter and not isWord then bnd[bsz, 0] := tsz; if isWord and not isLetter then begin bnd[bsz, 1] := tsz; bsz := bsz + 1; end;
isWord := isLetter; tsz := tsz + 1; until txt[tsz-1] in LineEnds;
if bsz > 1 then begin for i := 0 to bsz-2 do begin j := 0; f2 := true; f1 := (bnd[bsz-1, 1] - bnd[bsz-1, 0]) = (bnd[i, 1]-bnd[i, 0]); // совпадение длин
while (j < bnd[i, 1] - bnd[i, 0]) and f2 do begin f1 := f1 and (txt[bnd[i, 0] + j] = txt[bnd[bsz-1, 0] + j]); f2 := f2 and (LowCase(txt[bnd[i, 0] + j]) = Chr(Ord('a') + j)); j := j + 1; end;
// вывод if f2 and not f1 then begin for j := bnd[i, 0] to bnd[i, 1] - 1 do write(txt[j]); writeln; end; end; end; end.
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota
Оформи подписку