В час війни не у всіх є можливість вчитися. Не у всіх є можливість навіть вижити. Але кожен може спробувати принести щось своє для того, щоб жити і перемагати. Сьогодні у нас програмування. Так, під час війни. Хто може цим займатися, у кого є сили і можливості – приєднуйтесь. У кого немає – приєднуйтесь до нас все одно, хоч завтра, хоч після Перемоги.
Задача:
Число 18 має цікаву властивість. Сума його цифр не змінюється при множенні на 2, 3, 4, 5, 6, 7, 8, 9. Які ще є двоцифрові числа, що мають таку ж властивість?
Пояснення: cума цифр числа 18 буде число 9 (1+8). Якщо ми помножимо число 18 на два, то буде 36, а сума чисел числа 36 також буде дев'ять (3+6). Якщо помножимо на три, також 9 (5+4). Ну і так далі. Треба серед двоцифрових чисел знайти всі числа, що мають таку ж властивість. Можна вручну, можна написати програму.
Під посиланням «Детальніше» збираємо варіанти програм. Всі можуть взяти участь і поділитися своїм розв'язком: Ця електронна адреса захищена від спам-ботів. Вам необхідно увімкнути JavaScript, щоб побачити її.
Раджу спочатку спробувати самостійно, а вже потім порівняти з розв'язками, що написали інші.
Успіхів!
Правильна відповідь: Двоцифрові числа, що мають таку властивість: 18, 45, 90, 99.
Мій код, як на мене, зрозумілий, хоч і не оптимальний:
def sum_digits(x):
suma = 0
while x > 0:
suma += x % 10
x = x // 10
return suma
for i in range(10, 100):
x = sum_digits(i)
x2 = sum_digits(i * 2)
x3 = sum_digits(i * 3)
x4 = sum_digits(i * 4)
x5 = sum_digits(i * 5)
x6 = sum_digits(i * 6)
x7 = sum_digits(i * 7)
x8 = sum_digits(i * 8)
x9 = sum_digits(i * 9)
if x == x2 == x3 == x4 == x5 == x6 == x7 == x8 == x9:
print(i)
Код Олександра Соколова:
def sumofnum(n):
return sum([int(x) for x in list(str(n))])
for x in range(10, 100):
for i in range(2, 10):
if sumofnum(x * i) != sumofnum(x):
break
else:
print(x)