Дана строка S. Вывести символ L, который встречается наибольшее число раз. И количество этих символов (N). Если есть несколько символов с одинаковым количеством, вывести ПЕРВЫЙ из них.
int max1=0, count=1, m, maxs;
string L, max2, S;
int i;
getline(cin,S);
for ( i = 0; i < S.size(); i++) {
max2 = S[i];
m = i;
while ((maxs = (S.find(max2, i+1)) != -1) && ((i+1)<S.size())) {
count++;
i=maxs;
}
if (count > max1) {
L = max2;
max1 = count;
}
i = m;
count = 1;
}
cout << L << max1;
}
while ((maxs = (S.find(max2, i+1)) != -1) && ((i+1)<S.size())) {
count++;
i=maxs;
}
вот этот кусок
(maxs = (S.find(max2, i+1)) != -1)
означает следующее:
найти строку max2
в строке S
сравнить позицию c -1
присвоить maxs
результат сравнения (т.е. 0
если false
или 1
если true
)
значит если в строке присутствует подстрока дальше 1 символа, вы постоянно будете находить эту подстроку (поиск начинается с 1 символа), получать maxs = 1
... и искать и постоянного находить эту подстроку никуда по строке не сдвигаясь
подозреваю, что правильный код должен был бы быть таким:
while (
((maxs = S.find(max2, i+1)) != -1) &&
(i + 1 < S.size()
)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как можно сгенерировать случайную позицию для опорного элемента быстрой сортировки не используя функцию rand? Другие стратегии выбора не подходят...
При движении описанном в таком коде, игрок движется угловато: либо влево, либо вверх, либо вправо, либо вниз, ли по диагонали под углом 45 градусов...