var maxLen, cLen, i: integer; — КиберПедия 

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

var maxLen, cLen, i: integer;

2020-12-27 67
var maxLen, cLen, i: integer; 0.00 из 5.00 0 оценок
Заказать работу

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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.013 с.