ARR - это массив из length символов , состоящий из 0 и 1, я сделал так чтобы считались серии последовательности , для условия нужно чтобы последовательность была по сторонам окружена другими символами , например 010 - тут в 1 серии 1 бит подошел условию и мы записали в счетчик , например для подсчета количества последовательности второй серии подойдет 01100, и так далее 011100 - 0111100 , то есть есть 12 счетчиков , 6 это шесть серий от 1 до 6+ ( когда последняя серия она считается от 6 и более) это для 1 , и еще 6 уже для символа 0 .Подскажите пожалуйста , как то можно оптимизировать мои условия? И там еще есть мелкая ошибка , которую я найти не могу ( буду признателен
https://onlinegdb.com/b3op2c8xG
C/C++
Помогите найти ошибку в тесте на последовательности бит C++
В коде присутствует адресация за пределами массива (по j).
Если ваша задача - считать последовательности вида 01{1}0 (по БНФ фигурные скобки - это неограниченное кол-во повторений, начиная от 0), то надо именно её и решать. Нужно реализовать нормальный лексический анализ и простенький синтаксический разбор, а не эти страдания. В своё время мне попадался шикарный лексический сканер на регулярных выражениях; его преимущество - в наглядности описаний. Хотя, для вашей задачи это, наверное, будет слишком тяжеловесно.
Опишу алгоритм в общих словах:
Всё делается на простейших конечных автоматах.
Если ваша задача - считать последовательности вида 01{1}0 (по БНФ фигурные скобки - это неограниченное кол-во повторений, начиная от 0), то надо именно её и решать. Нужно реализовать нормальный лексический анализ и простенький синтаксический разбор, а не эти страдания. В своё время мне попадался шикарный лексический сканер на регулярных выражениях; его преимущество - в наглядности описаний. Хотя, для вашей задачи это, наверное, будет слишком тяжеловесно.
Опишу алгоритм в общих словах:
- Лексический анализ. Идёте по строке и находите лексемы. В случае, если надо искать 01{1}0 лексемами будут отдельный ноль и последовательность единиц любой длины. Выход алгоритма - последовательность лексем.
- Синтаксический разбор. Идёте по последовательности лексем и обновляете состояние и свои счётчики. Состояния: (1) "вне последовательности", (2) "начало последовательности", (3) "внутри последовательности". Начальное состояние (1). Обрабатываем лексемы по порядку в зависимости от состояния. Ноль в состоянии (1) - перевести в (2). Ноль в состоянии (2) - ничего не менять. Ноль в состоянии (3) - перевести в (1) и обновить счётчик по длине серии. Серия единиц в состоянии (1) - игнорировать. Серия единиц в состоянии (2) - перевести в (3) и сохранить длину серии. Серия единиц в состоянии (3) - игнорировать.
- Вывод результатов.
Всё делается на простейших конечных автоматах.
Два правила естественного отбора при решении сложных задач.
1. Если существуют несколько равноценных задач, то при выборе предпочтение следует отдать наиболее понятно сформулированной задаче.
2. Если имеется возможность отказаться от решения плохо сформулированной задачи, то от её решения следует немедленно отказаться.
1. Если существуют несколько равноценных задач, то при выборе предпочтение следует отдать наиболее понятно сформулированной задаче.
2. Если имеется возможность отказаться от решения плохо сформулированной задачи, то от её решения следует немедленно отказаться.
2
0
3
1
Похожие вопросы
- Помогите найти ошибки в коде на C++, не выводится последняя строчка
- Помогите найти ошибки в коде c++
- Помогите найти ошибку в коде
- С++ Win32 Api Помогите найти ошибку.
- Программа не выполняет условия задания, исходный массив меняет сам себя, помогите найти ошибку
- Помогите найти ошибку.Где ошибка в коде не могу найти язык СИ
- С++. Помогите найти ошибку в коде.
- Помогите найти ошибку
- Помогите найти ошибку в коде!!!
- Помогите найти ошибку в коде