Нужна помощь с программой на паскале
Можете помочь со строками? Я написал код который читает строки, содержащие числа, разделенные пробелами, и выводит каждое число на отдельной строке.
Но теперь мне нужно посчитать в строке цифры, встречающиеся хотя бы в двух числах.
К примеру строка 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 шт):
Ну что ж, попробуем так:
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.