Помогите решить задачу на языке 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)
→ Ссылка