Вот решение задачи на языке Free Pascal. Мы будем использовать стандартные функции и структуры, такие как массивы и циклы, чтобы обработать строку и найти слова, которые встречаются ровно один раз.
Подробное объяснение алгоритма:
- Разделим строку на слова, используя пробел как разделитель.
- Для каждого слова подсчитаем, сколько раз оно встречается в строке, используя массивы для хранения слов и их частот.
- Выведем только те слова, частота которых равна 1, и сохраним их порядок изначального появления в строке.
Код на Free Pascal:
program UniqueWords;
uses SysUtils;
var
S: string;
Words: array[1.100] of string;
Frequencies: array[1.100] of integer;
WordCount, i, j: integer;
CurrentWord: string;
IsUnique: boolean;
begin
// Читаем строку
ReadLn(S);
// Инициализируем переменные
WordCount := 0;
// Разделяем строку на слова
while Length(S) > 0 do
begin
// Найти первое слово (до пробела)
i := Pos(' ', S);
if i = 0 then
begin
CurrentWord := S; // Если пробелов больше нет, берём всю строку
S := '';
end
else
begin
CurrentWord := Copy(S, 1, i - 1); // Извлекаем слово
Delete(S, 1, i); // Удаляем слово из строки вместе с пробелом
end;
// Проверяем, есть ли уже это слово в массиве Words
IsUnique := True;
for j := 1 to WordCount do
begin
if Words[j] = CurrentWord then
begin
Frequencies[j] := Frequencies[j] + 1; // Увеличиваем частоту
IsUnique := False;
Break;
end;
end;
// Если слово уникально, добавляем его в массив Words
if IsUnique then
begin
WordCount := WordCount + 1;
Words[WordCount] := CurrentWord;
Frequencies[WordCount] := 1;
end;
end;
// Выводим слова, которые встречаются ровно один раз
for i := 1 to WordCount do
begin
if Frequencies[i] = 1 then
WriteLn(Words[i]);
end;
end.
Как работает программа:
- Чтение строки: Программа считывает строку
S
с входа.
- Разделение на слова: Используется цикл
while
, чтобы последовательно извлекать слова из строки. Функция Pos
находит первое вхождение пробела, чтобы выделить слово.
- Подсчет частот: Каждое слово сравнивается с уже сохраненными в массиве
Words
. Если слово уже встречалось, увеличивается его частота в массиве Frequencies
. Если слово новое, оно добавляется в массив Words
, а его частота устанавливается равной 1.
- Вывод результата: Программа выводит только те слова, частота которых равна 1, сохраняя порядок их появления.
Пример работы программы:
Для входной строки:
to be or not to be
Программа выполнит следующие шаги:
- Разделит строку на слова:
to
, be
, or
, not
, to
, be
.
- Подсчитает частоты:
to
— 2 раза,
be
— 2 раза,
or
— 1 раз,
not
— 1 раз.
- Выведет только слова с частотой 1:
or
not
Ограничения:
- Длина строки не превышает 100 символов.
- Все слова состоят только из строчных латинских букв.
Этот код полностью соответствует условиям задачи и работает эффективно для заданных ограничений.