Написать программу в с++ Даны натуральное число n , символы s1...s2 . а) Выяснить,...

0 голосов
129 просмотров

Написать программу в с++
Даны натуральное число n , символы s1...s2 .
а) Выяснить, имеется ли среди s....sn пара соседствующих одинаковых символов.
б) Выяснить, верно ли, что существуют такие натуральные i и j , что 1


image

Информатика (219 баллов) | 129 просмотров
0

Ща налабаем

Дан 1 ответ
0 голосов
Правильный ответ

Код прекреплен к ответу, всё прокоментрировано. Так же продублирован в коментариях. Если есть вопросы, велком в те же коментарии.

Спасибо за отметку "Лучший ответ" и нажатую кнопочку "Спасибо" (:

(1.4k баллов)
0

if (0 <= getFirstSimilarNearbySymbolsIndex(str)) //ищим индекс первого вхождения...<br> //прошлая функция, если он больше 0, значит есть такие символы
{
returnedValue = true; //соответственно если нашли, то true
}

return returnedValue; //возращаем значение
}

0

//одно из условий, см. строку 105
//-----------------------------------------------------------------------------
bool isFirstRule(const int& i, const int& j, const int& n)
//-----------------------------------------------------------------------------
{
return (1 < i < j < n);
}

0

//одно из условий, см. строку 106
//-----------------------------------------------------------------------------
bool isSecondRule(const string& str, const int& i, const int& j)
//-----------------------------------------------------------------------------
{
return (str[i] == str[i + 1] && str[j] == str[j + 1]);
}

0

//функция возращает 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;

0

if (str.length() <= n) //если строка короче чем индекс n, то и считать смысла нет<br> {
indexI = getFirstSimilarNearbySymbolsIndex(str); //индекс первого вхождения первой пары

if (0 <= indexI) //если она действительно существует, то ищем дальше<br> {
//индекс вхождения второй пары
indexJ = getFirstSimilarNearbySymbolsIndex(str, indexI + 2);

0

//проверяем условие, условие большое, для простоты понимания,
//лучше вынести в две функции
if (true == isFirstRule(indexI, indexJ, n) &&
true == isSecondRule(str, indexI, indexJ))
{
returnedValue = true;
}
}
}
return returnedValue;
}

0

//главная функция програмы, иначе говоря точка входа в неё
//-----------------------------------------------------------------------------
int main()
//-----------------------------------------------------------------------------
{
//входные данные, массив символов храним в строке для простоты
int N;
string symbols;

cout << "Enter simbols in a row and press key 'Enter'." << endl;<br> cout << "Your symbols: ";<br> cin >> symbols; //инициализация строки

0

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> }

0

//проверка второго условия и вывод ответа на экран
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, что значит, что программа завершила работу корректно.
}

0

/*
*
* Примеры входных данных и выходные значения:
* qwerty 5 - false, false
* qweerty 2 - true, false
* qweertyy 10 - true, true
*
*/