Написать программу, которая находит одинаковые цифры двух чисел. в pascal, желательно через function. можно чтобы токого не было.входные данные: 466 476. выходные : 6 6. заранее
PascalABC.NET 3.3.5, сборка 1659 от 09.04.2018 Внимание! Если программа не работает, обновите версию!
function Duplicates(a,b:int64):array of char; begin var ha:=a.ToString.ToHashSet; ha.IntersectWith(b.ToString.ToHashSet); Result:=ha.ToArray end;
begin var m,n:int64; Write('Введите через пробел два натуральных числа: '); Read(m,n); var r:=Duplicates(m,n); if r.Length=0 then Writeln('Нет цифр, встречающихся в обоих числах') else r.Println(',') end.
Примеры Введите через пробел два натуральных числа: 12345 6789067 Нет цифр, встречающихся в обоих числах
Введите через пробел два натуральных числа: 1342103 6748644 4
Реализация без множеств
procedure nToArray(n:int64; a:array of boolean); begin for var i:=0 to 9 do a[i]:=False; if n=0 then a[0]:=True else while n>0 do begin a[n mod 10]:=True; n:=n div 10 end end;
function Duplicates(a,b:int64):array of boolean; begin var ma:=new boolean[10]; var mb:=new boolean[10]; nToArray(a,ma); nToArray(b,mb); Result:=new boolean[10]; for var i:=0 to 9 do Result[i]:=ma[i] and mb[i] end;
begin var m,n:int64; Write('Введите через пробел два натуральных числа: '); Read(m,n); var r:=Duplicates(m,n); Write('Совпадающие цифры: '); for var i:=0 to 9 do if r[i] then Write(i,' '); Writeln end.
Пример Введите через пробел два натуральных числа: 12352423 98789635233 Совпадающие цифры: 2 3 5
Внимание! Если программа не работает, обновите версию!
function Duplicates(a,b:int64):array of char;
begin
var ha:=a.ToString.ToHashSet;
ha.IntersectWith(b.ToString.ToHashSet);
Result:=ha.ToArray
end;
begin
var m,n:int64;
Write('Введите через пробел два натуральных числа: ');
Read(m,n);
var r:=Duplicates(m,n);
if r.Length=0 then Writeln('Нет цифр, встречающихся в обоих числах')
else r.Println(',')
end.
Примеры
Введите через пробел два натуральных числа: 12345 6789067
Нет цифр, встречающихся в обоих числах
Введите через пробел два натуральных числа: 1342103 6748644
4
Реализация без множеств
procedure nToArray(n:int64; a:array of boolean);
begin
for var i:=0 to 9 do a[i]:=False;
if n=0 then a[0]:=True
else
while n>0 do begin
a[n mod 10]:=True;
n:=n div 10
end
end;
function Duplicates(a,b:int64):array of boolean;
begin
var ma:=new boolean[10];
var mb:=new boolean[10];
nToArray(a,ma);
nToArray(b,mb);
Result:=new boolean[10];
for var i:=0 to 9 do
Result[i]:=ma[i] and mb[i]
end;
begin
var m,n:int64;
Write('Введите через пробел два натуральных числа: ');
Read(m,n);
var r:=Duplicates(m,n);
Write('Совпадающие цифры: ');
for var i:=0 to 9 do
if r[i] then Write(i,' ');
Writeln
end.
Пример
Введите через пробел два натуральных числа: 12352423 98789635233
Совпадающие цифры: 2 3 5