Задача.
Дан текст, каждый символ которого может быть малой буквой, цифрой или одним из знаков +, -, *. Группой букв будем называть такую совокупность последовательно расположенных букв, которой непосредственно не предшествует и за которой непосредственно не следует буква. Аналогично определим группу цифр и группу знаков.
Найти самую длинную группу цифр. Если эту наибольшую длину имеет несколько групп, то взять первую по порядку.
Тесты.
Ввод | Вывод |
1aa2bb+-c2cc—**22 | 22 |
11aa2bb+-c2cc—**22 | 11 |
1aa2bb+-c23cc—**22 | 23 |
111aa2bb+-c2cc—**22 | 111 |
1aa2bb+-c234cc—**22 | 234 |
1aa221bb+-c234cc—**22 | 221 |
Код программы (string):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#include <iostream> #include <string> using namespace std; int main() { string s; cin>>s; int k=0,n=0,a; for(int i=0;i<s.length()+1;i++) { if(n<k) n=k; if(isdigit(s[i])) k=k+1; else k=0; } for(int i=s.length();i>=-1;i--) { if(k==n) a=i+1; if(isdigit(s[i])) k=k+1; else k=0; } for(int i=a;i<a+n;i++) { cout<<s[i]; } return 0; } |
Код программы (cstring):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#include <iostream> #include <cstring> using namespace std; int main() { char *s; s=new char[100]; cin>>s; int k=0,n=0,a; for(int i=0;i<strlen(s)+1;i++) { if(n<k) n=k; if(isdigit(s[i])) k=k+1; else k=0; } for(int i=strlen(s);i>=-1;i--) { if(k==n) a=i+1; if(isdigit(s[i])) k=k+1; else k=0; } for(int i=a;i<a+n;i++) { cout<<s[i]; } return 0; } |
Решение.
Вводим строку в переменную s. В первом цикле ищем наибольшую группу записывая значение в переменную n. В следующем цикле ищем номер первого символа в группе записывая значение в переменную a. В третьем цикле выводим символы с номерами с a-го по a+n.
— Нет ссылок для запуска программ для проверки.
— Метки неудачные
— Пояснений практически нет
Код программы(string): ideone
Код программы(cstring): ideone
Решение: Сначала заводим переменную s, в эту переменную записываем строку.
После заводим переменные k, n, a. Пременная k будет счётчиком, в n позже будет записанна максимальнная длина группы, a переменная а будет номером первого элемента в максимальной группе. В первом цикле проверяем, если символ с данным номером будет цифрой, то увеличиваем счётчик на 1. Также проверяем, если значение счётчика становится больше n, то n присваиваем значение k. К концу цикла в переменной k будем иметь значение количества элементов в наибольшей группе. В следующем цикле начинаем с последнего элемента(это делаем для того, чтобы получить первую максимальнную группу). В цикле ищем то место, когда счётчик будет равен n, и в этом месте переменной а присваиваем значение i+1. В следующем цикле выводим значение сначиная с а, n символов.