Задачу решается вот таким жутким перебором (который, если немного подумать можно ещё сократить): //Рюмка+рюмка=авария var a,b,c,d,e,f,g,h:integer; begin for a:=1 to 9 do //р for b:=0 to 9 do //ю if (b<>a) then for c:=0 to 9 do //м if (c<>a)and(c<>b) then for d:=0 to 9 do //к if (d<>a)and(d<>b)and(d<>c) then for e:=1 to 1 do //а if (e<>a)and(e<>b)and(e<>c)and(e<>d) then for f:=0 to 9 do //в if (f<>a)and(f<>b)and(f<>c)and(f<>d)and(f<>e)then for g:=0 to 9 do //и if (g<>a)and(g<>b)and(g<>c)and(g<>d)and(g<>e)and(g<>f)then for h:=2 to 2 do //я if (h<>a)and(h<>b)and(h<>c)and(h<>d)and(h<>e)and(h<>f)and(h<>g)then if 2*(a*10000+b*1000+c*100+d*10+e)=e*100000+f*10000+e*1000+a*100+g*10+h then writeln(a*10000+b*1000+c*100+d*10+e,' ',e*100000+f*10000+e*1000+a*100+g*10+h); end.
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
//Рюмка+рюмка=авария
var a,b,c,d,e,f,g,h:integer;
begin
for a:=1 to 9 do //р
for b:=0 to 9 do //ю
if (b<>a) then
for c:=0 to 9 do //м
if (c<>a)and(c<>b) then
for d:=0 to 9 do //к
if (d<>a)and(d<>b)and(d<>c) then
for e:=1 to 1 do //а
if (e<>a)and(e<>b)and(e<>c)and(e<>d) then
for f:=0 to 9 do //в
if (f<>a)and(f<>b)and(f<>c)and(f<>d)and(f<>e)then
for g:=0 to 9 do //и
if (g<>a)and(g<>b)and(g<>c)and(g<>d)and(g<>e)and(g<>f)then
for h:=2 to 2 do //я
if (h<>a)and(h<>b)and(h<>c)and(h<>d)and(h<>e)and(h<>f)and(h<>g)then
if 2*(a*10000+b*1000+c*100+d*10+e)=e*100000+f*10000+e*1000+a*100+g*10+h then
writeln(a*10000+b*1000+c*100+d*10+e,' ',e*100000+f*10000+e*1000+a*100+g*10+h);
end.
Результат:
85931 171862