Условие пытается немного обмануть решающего. На самом деле всегда можно выбрать Рахманов ломтик строки, состоящий из одного символа (действительно, если в искомой подстроке несколько символов, то каждый из них встречается не меньшее число раз, что и сама подстрока). В итоге задача превращается в тривиальную: считать строку и вывести символ, встречающийся максимальное число раз.
#include <iostream>
int main() {
char c, maxchar;
int count[26] = {0}, maxcount = 0;
while (std::cin.get(c)) {
count[c - 'a']++;
}
for (c = 0; c < 26; c++) {
if (count[c] > maxcount) {
maxcount = count[c];
maxchar = c;
}
}
std::cout << static_cast<char>(maxchar + 'a');
return 0;
}
Подробнее - на -
type
Str = record
fio: string;
h: byte;
end;
var
base: array of Str;
i,sum,n,err:integer;
begin
write('Число учеников: '); readln(n);
setlength(base,n);
sum:=0;
writeln('Введите фамилию и рост через "space": ');
for i:=0 to n-1 do
begin
write(i+1:4,'. ');
readln(base[i].fio);
val(copy(base[i].fio,
pos(' ',base[i].fio)+1,
length(base[i].fio)-pos(' ',base[i].fio)),
base[i].h,
err);
delete(base[i].fio,
pos(' ',base[i].fio),
length(base[i].fio));
sum:=sum+base[i].h;
end;
writeln('Средний рост: ',sum/n:4:1);
for i:=0 to n-1 do
if base[i].h<sum/n then
writeln(base[i]);
end.