Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Топ:
Марксистская теория происхождения государства: По мнению Маркса и Энгельса, в основе развития общества, происходящих в нем изменений лежит...
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного хозяйства...
История развития методов оптимизации: теорема Куна-Таккера, метод Лагранжа, роль выпуклости в оптимизации...
Интересное:
Влияние предпринимательской среды на эффективное функционирование предприятия: Предпринимательская среда – это совокупность внешних и внутренних факторов, оказывающих влияние на функционирование фирмы...
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Дисциплины:
2020-12-27 | 67 |
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:
|
|
Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!