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