Даны два натуральных числа m и n (n<=9999, n<=9999 ). Проверить есть ли в записи числа m цифры, одинаковые с цифрами в записи числа n
Уровень моих знаний не велик поэтому я решил вот так: Буду сильно благодарен, если решите с объяснением как новичку))спасибо заранее!
from math import*
m, n = map(int, input().split())
m4= m%10
m3= m//10%10
m2=m//100%10
m1= m//1000
n4= n%10
n3= n//10%10
n2=n//100%10
n1= n//1000
if m1==n1 or m1==n2 or m1== n3 or m1==n4 or m2==n1 or m2==n2 or m2==n3 or m2==n4 or
m3==n1 or m3==n2 or m3==n3 or m3==n4 or m4==n1 or m4==n2 or m4==n3 or m4==n4:
print("YEs")
else:
print("No")
Ответы (3 шт):
Автор решения: SergFSM
→ Ссылка
для нахождения пересечения (одинаковых цифр) удобно использовать тип данных set (множество), для этого у множеств есть метод intersection. но сначала надо сделать из числа множество, то есть разобрать его на цифры. для этого можно воспользоваться циклом:
m1, n1 = set(),set() # пустые множества
while m: # разбираем на цифры число m
m1|={m%10} # добавляем в множество последнюю цифру
m//=10 # отбрасываем последнюю цифру
while n:
n1|={n%10}
n//=10
print('Yes' if n1 & m1 else 'No') # если есть пересечение печатаем Yes
то же самое можно сделать с помощью рекурсивной функции:
f = lambda n: {n} if n<10 else {n%10}|f(n//10) # делаем из числа множество
print('Yes' if f(n)&f(m) else 'No')
Автор решения: Stanislav Volodarskiy
→ Ссылка
Работать с числами не надо. Вводим две строки, строим из них множества, проверяем множества на пересечение:
s1, s2 = map(set, input.split())
if s1 & s2:
print('Yes')
else:
print('No')
Автор решения: MiniMax
→ Ссылка
С использованием списка, при условии, что ноль не входит в натуральные числа.
def same_digits(a, b):
lst = [False] * 10
while a:
lst[a % 10] = True
a //= 10
while b:
if lst[b % 10]:
return True
b //= 10
return False
print(same_digits(165, 1280))
print(same_digits(765, 5270))
print(same_digits(5, 1270))
Output
True
True
False