Предмет: Информатика,
автор: Stas1211
Написать программу, которая находит одинаковые цифры двух чисел. В pascal, желательно через function. Можно чтобы токого не было.Входные данные:466 476. Выходные даныые:6 6.
Заранее спасибо
Stas1211:
да*
Ответы
Автор ответа:
2
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
Max значение int64 = 9223372036854775807
Похожие вопросы
Предмет: История,
автор: kisa242424
Предмет: Алгебра,
автор: aidabakyt08
Предмет: Математика,
автор: zaguljaevat
Предмет: Математика,
автор: Алинка8малинка
Предмет: Математика,
автор: Stasilkys