Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Топ:
Процедура выполнения команд. Рабочий цикл процессора: Функционирование процессора в основном состоит из повторяющихся рабочих циклов, каждый из которых соответствует...
Особенности труда и отдыха в условиях низких температур: К работам при низких температурах на открытом воздухе и в не отапливаемых помещениях допускаются лица не моложе 18 лет, прошедшие...
Основы обеспечения единства измерений: Обеспечение единства измерений - деятельность метрологических служб, направленная на достижение...
Интересное:
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Дисциплины:
|
из
5.00
|
Заказать работу |
|
|
|
|
s: string;
Begin
assign(input, 'k7.txt');
readln(s);
maxLen:= 0;
cLen:= 0;
for i:=1 to Length(s) do
if s[i] = 'C' then begin
cLen:= cLen + 1;
if cLen > maxLen then maxLen:= cLen;
end
else
cLen:= 0;
writeln(maxLen);
End.
Решение (программа на языке C++):
6) в C++ удобно работать с файлами через файловые потоки; для того, чтобы использовать эту возможность, нужно подключить заголовочный файл fstream:
#include <fstream>
7) для того чтобы читать всю строку целиком с помощью функции getline, нужно подключить заголовочный файл string:
#include <string>
8) теперь можно открыть файловый поток, связать его с нужным файлом и прочитать из потока строку в переменную типа string:
ifstream F("k7.txt");
string s;
getline(F, s);
9) алгоритм обработки строки тот же, что и в программах на языках Python и Pascal, рассмотренных выше
10) поскольку в программе используется много объектов из пространства имён std, имеет смысл подключить его в начале программы:
using namespace std;
11) полная программа на языке C++:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
Int main()
{
ifstream F("k7.txt");
string s;
getline(F, s);
int maxLen = 0, cLen = 0;
for(int i = 0; i < s.length(); i++)
if(s[i] == 'C') {
cLen ++;
if(cLen > maxLen)
maxLen = cLen;
}
else cLen = 0;
cout << maxLen;
}
Решение методом грубой силы (Б.С. Михлин):
1) если решить красиво не получается, можно применить метод грубой силы, использующий встроенную функцию поиска подстроки: ищём строку из одного символа C, потом – из двух символов, из трёх и т.д.; в какой-то момент поиск не даст результата, значит ответ – это длина предыдущей цепочки, которая короче текущей на единицу
2) вот решение на Python:
with open("k7.txt", "r") as F:
s = F.readline()
cc = 'C'
while cc in s:
cc += 'C'
print(len(cc)-1)
3) решение на Паскале:
var cc, s: string;
Begin
assign(input, 'k7.txt');
readln(s);
cc:= 'C';
while Pos(cc, s) > 0 do
cc:= cc + 'C';
writeln(Length(cc)-1);
End.
4) решение на C++:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
Int main()
{
ifstream F("k7.txt");
string s, cc;
getline(F, s);
cc = 'C';
while(s.find(cc)!= string::npos)
cc += 'C';
cout << cc.length()-1;
}
5) эту задачу можно решать вообще без программирования, используя функцию поиска в любом текстовом редакторе или процессоре; для ускорения можно сначала удваивать длину искомой цепочки, а после того, как поиск закончится неудачно, применять двоичный поиск в интервале
6) конечно, нужно понимать, что эффективность (скорость работы) этого алгоритма крайне низкая в сравнении с описанным выше однопроходным поиском, но на небольших файлах и этот метод вполне может сработать.
Решение в электронных таблицах (Б.С. Михлин):
1) можно применить тот же метод грубой силы, использующий электронные таблицы. Сначала откроем файл в текстовом редакторе и скопируем все его содержимое в буфер обмена. Затем откроем новую электронную таблицу и вставим строку из буфера обмена в какую-нибудь ячейку (в примере ниже это ячейка А2). Затем в окне «Найти» вбиваем один символ «С» и нажимаем кнопку «Найти все», потом два символа «С», три и т.д., пока не появится сообщение «…не удается найти искомые данные». Значит максимальная длина подцепочки из символов «С», входящая в заданную цепочку, на единицу меньше. При большой длине максимальной подцепочки при подсчете в ней количества символов легко ошибиться.
2) можно также использовать встроенные текстовые функции электронных таблиц: FIND (НАЙТИ) или SEARCH (ПОИСК) и REPT (ПОВТОР). Меняя в функции ПОВТОР коэффициент повторения символа "C" мы повторяем идею п. 1. Для ускорения поиска можно коэффициент повторения менять сперва с крупным шагом, а затем с более мелким. Также можно обойтись только одной ячейкой с формулой.
Функции НАЙТИ и ПОИСК выводят положение начала искомой подцепочки в заданной цепочке символов или сообщение #ЗНАЧ!, если подцепочка не найдена. Если поиск надо осуществлять с начала цепочки, то третий параметр функций НАЙТИ и ПОИСК можно не указывать. Функция НАЙТИ учитывает регистр символов. Функция ПОИСК не учитывает регистр символов и в ней можно использовать подстановочные символы (* и?).
Вот решение задачи в OpenOffice Calc:

и в русской версии Excel:

|
|
|
История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!