Подскажите, что не так?
Есть задание: Рассматривается множество целых чисел, принадлежащих числовому отрезку [3912; 9193], которые удовлетворяют следующим условиям: − сумма цифр числа кратна 9; − шестнадцатеричная запись числа не заканчивается на 21. Найдите количество таких чисел и максимальное из них. Правильный ответ: 585 9189. Скажите, пожалуйста, что не так с кодом?
s = 0
c = 0
for i in range(3912, 9193+1):
n1 = i
if (i // 16) % 16 != 21:
s = 0
while i != 0:
s = s + i % 10
i = i // 10
if s % 9 == 0:
c = c + 1
n = n1
print(c, n)
587 9189
Ответы (3 шт):
Автор решения: Billy
→ Ссылка
можете попробовать так:
for i in range (3912,9194):
if sum([int(k) for k in str(i)])%9 == 0 and i%256 == 33:
print(i)
Автор решения: Danis
→ Ссылка
(i // 16) % 16
замените на
i % 256
и 21 в шестнадцатеричной системе это 33
s = 0
c = 0
for i in range(3912, 9193+1):
n1 = i
if i % 256 != 33:
s = 0
while i != 0:
s = s + i % 10
i = i // 10
if s % 9 == 0:
c = c + 1
n = n1
print(c, n)
также можно уменьшить код если идти с шагом 9
c = 0
for i in range(3912+3, 9193+1, 9):
if i % 256 != 33:
c += 1
n = i
print(c, n)
Автор решения: Zhihar
→ Ссылка
ну можно решить в лоб:
count = 0
found = 0
for i in range(3912, 9193 + 1):
# определить сумму цифр
digits = 0
value = i
while value != 0:
digits += value % 10
value //= 10
# определить на что заканчивается число в 16ричной записи
last = i % 256
# выбрать нужные числа
if digits % 9 == 0 and last != 33:
count += 1
found = i
print(count, found)
если ввести функцию, то можно упростить код, но он все таки не рассчитан на случаи, когда надо найти миллиарды чисел, в этом случае лучше первый вариант:
def digits(value):
res = 0
while value != 0:
res += value % 10
value //= 10
return res
data = [i for i in range(3912, 9193 + 1) if i % 256 != 33 and digits(i) % 9 == 0]
print(len(data), data[-1])