Нужна помощь с программой на паскале

Можете помочь со строками? Я написал код который читает строки, содержащие числа, разделенные пробелами, и выводит каждое число на отдельной строке.

Но теперь мне нужно посчитать в строке цифры, встречающиеся хотя бы в двух числах.
К примеру строка 12 34 56 74
Цифры, встречающиеся хотя бы в двух числах: 4, то есть цифра 4 встречается в числах 34 и 74.

var   
  inputStr:string;
  outputStr:string;
  i:byte;

  begin
    readln(inputStr);
    for i:= 1 to length(inputStr) do
    begin
      if ( inputStr[i] <> ' ' ) then
        outputStr:=outputStr + inputStr[i]
      else
        begin
          writeln('Число: ', outputStr);
          outputStr:= '';
        end; 
    end;
 
    if ( outputStr <> '') then 
      write('Число: 'outputStr);      
 
  end.

Ответы (1 шт):

Автор решения: MBo

Ну что ж, попробуем так:

tempset - множество цифр текущего числа
allset - множество цифр всех обработанных чисел
duoset - множество цифр, которые встречаются не в одном числе

После каждого числа tempset содержит множество его цифр

Вычисляем пересечение ('*') этого множества со множеством allset - цифр из прошлых чисел, получаем множество цифр, которые есть и в этом числе, и в прошлых, добавляем его в duoset

Обновляем allset и чистим tempset для следующего числа.

Почему нельзя просто посчитать количество цифр везде? Потому что 355 даст повтор цифр, но он в одном числе.

var   
  inputStr:string;
  i:byte;
  c: Char;
  allset, tempset, duoset: set of '0'..'9';

  begin
    allset := [];
    tempset := [];
    duoset := [];
    readln(inputStr);
    inputStr := inputStr +' ';
    for i:= 1 to length(inputStr) do
    begin
      if ( inputStr[i] in ['0'..'9']) then 
        tempset := tempset + [inputStr[i]]
      else
        begin
          duoset := duoset + allset * tempset;
          allset := allset + tempset;
          tempset := [];
        end; 
    end;
 
    for c := '0' to '9' do 
       if c in duoset then 
           writeln('Повторяется: ',  c);      
 
end.
→ Ссылка