Помогите решить задачу на языке Python
Сколько существует различных трёхзначных чисел, записанных в четверичной системе счисления, в записи которых сумма первой и последней цифры строго больше цифры стоящей по середине?
Мой код:
a = "0123"
c = 0
for l1 in a:
for l2 in a:
for l3 in a:
w = l1 + l2 + l3
if w[0] + w[2] >= w[1] and w[0] != "0":
c += 1
print(c)
Правильный ответ: 38. Но у меня выводит 36.
Ответы (3 шт):
Автор решения: MBo
→ Ссылка
Вот здесь
if w[0] + w[2] >= w[1]
вы складываете цифры как символы, так что в левой части получается строка из двух символов.
Вероятно, вы хотели этого (заметьте также "строго больше"):
if int(w[0]) + int(w[2]) > int(w[1])
Автор решения: rotabor
→ Ссылка
Зачем же мучаться с символами, если можно сразу оперировать числами?
a = {0,1,2,3}
c = 0
for l1 in {1,2,3}:
for l2 in a:
for l3 in a:
if l1 + l2 > l3:
c += 1
print(c)
И от проверки на 0 тоже можно отказаться, просто если не включать его в набор для итерации.
Альтернативный вариант от @АлексейР:
a = 0,1,2,3
c = 0
for l1 in a[1:]:
for l2 in a:
for l3 in a:
if l1 + l2 > l3:
c += 1
print(c)
Альтернативный вариант от @StanislavVolodarskiy:
c = 0
for l1 in range(1,4):
for l2 in range(4):
for l3 in range(4):
if l1 + l2 > l3:
c += 1
print(c)
Автор решения: Иван Ипатов
→ Ссылка
Я решал это задание так:
import itertools
# Функция проверки
def check(x):
# число не может начинаться с нуля
if x[0] == "0":
return False
# инвертируем условие, если число
# посередине больше или равно сумме боковых
if int(x[0]) + int(x[-1]) <= int(x[1]):
return False
# если число удовлетворяет всем требованиям
return True
k = set() # множество уникальных значений
# Проходимся по всем вариантам (000, 001 ... 333)
for i in itertools.product('0123', repeat=3):
a = ''.join(i) # product возвращает тип tuple, конвертируем в строку
# если число удовлетворяет всем условиям, то
# добавляем в множество
if check(a):
k.add(a)
print(len(k), k)