доброго вечера, может кто помочь написать программу ? ломаю голову уже не первый день, и даже зная что нужно делать все равно не получается это запрограммировать, если не сложно помогите пожалуйста
Задан массив символов A[n]. Найти самую длинную повторяющуюся последовательность символов и переписать ее в отдельный массив
Просто найти длиннейшую последовательность - это я могу, но вот повторяющуюся минимум 2 раза - с этим у меня проблемы . .
Вариант решения у меня есть, но все равно не получается, вот вариант :
Ищем первую последовательность. Проходим массив до конца, в поиске точно такой же последовательности (во внутреннем цикле). Если найдена, сохраняем ее в переменную максимальной последовательности, создаем переменную хранящую ее размер. Дальше во внешнем цикле ищем следующую последовательность символов. И снова во внутреннем ищем, повторяется она или нет. Если повторяется, то сравниваем ее размер, с размером максимальной сохраненной в переменную. Если она длиннее, то заменяем массив с максимальной последовательностью на новую, если нет - оставляем без изменений. Таким образом, дойдя во внешнем цикле до конца, мы получим в нашем массиве самую длинную последовательность.
То есть в примере введенного массива a b c K L M N k q w K L M N, здесь последовательность будет к л м н, для проверки я использовал массив на 26 элементов в котором был английский алфавит, потом проверял значение введенного символа на его порядковый номер в алфавите, и записывал. Далее вводилось 2 значение, и так же находился его порядковый номер, и если этот порядковый номер при проверке на -1 был равен предыдущему символу- значит символ идет последовательно, и делал так до конца пока проверка на последовательность не становилась неверной, указав координаты начала последовательности и конца - которые при 2 совпадающем символе я начал считать, записывал эту последовательность в массив, и записывал ее размер вида конец минус начало в отдельную переменную получая количество символов в массиве, потом находя след. последовательность проделывал то же самое, сравнивал размер с тем что записан в максимальную, и если больше то заменял. А вот при минимум 2 повторах я бессилен . .надеюсь на вашу помощь, заранее спасибо
И если возможно - используйте не сильно профессиональные варианты написания отдельных строк в программе, т.к с многими из них я еще не сталкивался, и очень проблематично разбираться что они значат.
Программное обеспечение
Помогите пoжалуйста написать программу в с++
#include <iostream>
using namespace std;
int main() {
cout << "n? ";
int n;
cin >> n;
cout << "seq? ";
char *a = new char[n];
for (int i = 0; i < n; ++i) cin >> a[ i];
int mi = 0;
int mn = 0;
for (int cn = 1; cn <= n / 2; ++cn) {
for (int ci = 0; ci <= n - cn * 2; ++ci) {
bool eq;
for (int cj = ci + cn; cj <= n - cn; ++cj) {
eq = true;
for (int c = 0; c < cn; ++c) {
if (a[ci + c] != a[cj + c]) {
eq = false;
break;
}
}
if (eq) break;
}
if (eq) {
mn = cn;
mi = ci;
break;
}
}
}
char *m = new char[mn];
for (int i = 0; i < mn; ++i) m[ i] = a[ i + mi];
cout << "mn: " << mn << "; mi: " << mi << endl;
for (int i = 0; i < mn; ++i) {
cout << m[ i];
}
delete [] a;
delete [] m;
return 0;
}
Пример:
Ввод:
n? 8
seq? 01234120
Результат:
mn: 2; mi: 1
12
Т. е. найдена последовательность размера 2 (mn), c индекса начинающегося с 1 (mi), и сама последовательность "12"
ЗЫ: особо не тестировал, может и не работать. Если комментировать программу, то не хватит места на ответ.
using namespace std;
int main() {
cout << "n? ";
int n;
cin >> n;
cout << "seq? ";
char *a = new char[n];
for (int i = 0; i < n; ++i) cin >> a[ i];
int mi = 0;
int mn = 0;
for (int cn = 1; cn <= n / 2; ++cn) {
for (int ci = 0; ci <= n - cn * 2; ++ci) {
bool eq;
for (int cj = ci + cn; cj <= n - cn; ++cj) {
eq = true;
for (int c = 0; c < cn; ++c) {
if (a[ci + c] != a[cj + c]) {
eq = false;
break;
}
}
if (eq) break;
}
if (eq) {
mn = cn;
mi = ci;
break;
}
}
}
char *m = new char[mn];
for (int i = 0; i < mn; ++i) m[ i] = a[ i + mi];
cout << "mn: " << mn << "; mi: " << mi << endl;
for (int i = 0; i < mn; ++i) {
cout << m[ i];
}
delete [] a;
delete [] m;
return 0;
}
Пример:
Ввод:
n? 8
seq? 01234120
Результат:
mn: 2; mi: 1
12
Т. е. найдена последовательность размера 2 (mn), c индекса начинающегося с 1 (mi), и сама последовательность "12"
ЗЫ: особо не тестировал, может и не работать. Если комментировать программу, то не хватит места на ответ.
Похожие вопросы
- Если можно создать/написать программу, то можно ли уже существующую программу изменить? И как?
- Помогите пожалуйста с программой.
- Помогите с выбором программы для 3D-моделирования.
- Помогите пропал ярлык программы
- Помогите, пожалуйста с программой по оптимизации системы и дефрагментации дисков!!!
- помогите написать программу на basic
- Народ помогите с поиском программы ) извените что немогу чётко задать вопрос но очень нуда ваша помощь!!
- Помогите с выбором программы для чистки компьютера)
- Ребята помогите проблемы с программами!
- помогите с тупой программой alcohol 120%