Написать программу в с++ Даны натуральное число n , символы s1...s2 . а) Выяснить, имеется ли среди s....sn пара соседствующих одинаковых символов. б) Выяснить, верно ли, что существуют такие натуральные i и j , что 1
Ща налабаем
Код прекреплен к ответу, всё прокоментрировано. Так же продублирован в коментариях. Если есть вопросы, велком в те же коментарии. Спасибо за отметку "Лучший ответ" и нажатую кнопочку "Спасибо" (:
if (0 <= getFirstSimilarNearbySymbolsIndex(str)) //ищим индекс первого вхождения...<br> //прошлая функция, если он больше 0, значит есть такие символы { returnedValue = true; //соответственно если нашли, то true } return returnedValue; //возращаем значение }
//одно из условий, см. строку 105 //----------------------------------------------------------------------------- bool isFirstRule(const int& i, const int& j, const int& n) //----------------------------------------------------------------------------- { return (1 < i < j < n); }
//одно из условий, см. строку 106 //----------------------------------------------------------------------------- bool isSecondRule(const string& str, const int& i, const int& j) //----------------------------------------------------------------------------- { return (str[i] == str[i + 1] && str[j] == str[j + 1]); }
//функция возращает true, если в строке имеется соответствие условию: //'1 < i < j < n' и S[i] = S[i+1] и S[j] = S[j+1] //----------------------------------------------------------------------------- bool isExistsTwoNumbersByRule(const string& str, const int& n) //----------------------------------------------------------------------------- { bool returnedValue = false; int indexI; //индексы из условия int indexJ;
if (str.length() <= n) //если строка короче чем индекс n, то и считать смысла нет<br> { indexI = getFirstSimilarNearbySymbolsIndex(str); //индекс первого вхождения первой пары if (0 <= indexI) //если она действительно существует, то ищем дальше<br> { //индекс вхождения второй пары indexJ = getFirstSimilarNearbySymbolsIndex(str, indexI + 2);
//проверяем условие, условие большое, для простоты понимания, //лучше вынести в две функции if (true == isFirstRule(indexI, indexJ, n) && true == isSecondRule(str, indexI, indexJ)) { returnedValue = true; } } } return returnedValue; }
//главная функция програмы, иначе говоря точка входа в неё //----------------------------------------------------------------------------- int main() //----------------------------------------------------------------------------- { //входные данные, массив символов храним в строке для простоты int N; string symbols; cout << "Enter simbols in a row and press key 'Enter'." << endl;<br> cout << "Your symbols: ";<br> cin >> symbols; //инициализация строки
cout << "Enter N number: ";<br> cin >> N; //инициализация индекса n //проверка первого условия и вывод ответа на экран cout << "Is in symbol collection exists similar nearby symbols: ";<br> if (true == isExistsTwoSimilarNearbySymbols(symbols)) { cout << "true." << endl;<br> } else { cout << "false." << endl;<br> }
//проверка второго условия и вывод ответа на экран cout << "Is exists integer i and j as '1 < i < j < n' and S[i] = S[i+1] and S[j] = S[j+1]: ";<br> if (true == isExistsTwoNumbersByRule(symbols, N)) { cout << "true." << endl;<br> } else { cout << "false." << endl;<br> } cout << endl;<br> return 0; //возращаем системе код 0, что значит, что программа завершила работу корректно. }
/* * * Примеры входных данных и выходные значения: * qwerty 5 - false, false * qweerty 2 - true, false * qweertyy 10 - true, true * */