--- Python 3.8.3 ---
n = int(input('n: \n'))
counter = 0
for coin1 in range(0, n+ 1):
for coin2 in range(0, (n // 2) + 1):
for coin5 in range(0, (n // 5) + 1):
for coin10 in range(0, (n // 10) + 1):
if coin1 * 1 + coin2 * 2 + coin5 * 5 + coin10 * 10 == n: counter += 1
print(counter)
для n в пределах 100-200 считает вроде правильно, и достаточно быстро. Что до больших значений n, мне не хватило терпения. Ненормально это, успеть попить чаю в ожидании конца работы программы в 8 строк.
При желании можно использовать как стресс-тест ЦПУ
Ну смотри... Для начала переведем из двоичного твое число в десятичное.
Смотрим с конца:
1 * 2^0 + 1 * 2^1 + 0 * 2^2 + 1 * 2^3 + 0 * 2^4 + 1 * 2^5 = 1 + 2 + 8 + 32 = 43
Ну на самом деле я ответ и до этого знал, на питоне можно написать в интерпретаторе 0b101011 и он выдаст ответ. Расписал чтоб хоть понятна была логика. Мы идем от самого конца и каждое число двигаясь к началу мы умножаем на 2 в степени n + 1 скажем так. Ну это грубо говоря :)
43 + 38 = 81, тут все понятно...
И переводим теперь 81 в двоичную. На питоне это bin(81) = 1010001
А теперь показываю как своими ручками посчитать)
*приложил скриншот" у нас получилось 1010001 - питон не врет :)
Необходимо просто последовательно делить на 2 до тех пор, пока не останется остаток, меньший или равный 1. И самое главное - что число в двоичной системе записывается как последовательность последнего результата деления и остатков от деления в обратном порядке.
Поделитесь своими знаниями, ответьте на вопрос:
Что я узнал о компьютере и его устройстве