302) (А. Игнатюк) Исполнитель «Аполлон» получает на вход четырёхзначное число N и строит новое число R по следующим правилам:
1. Если число N начинается с чётной цифры, то число R вычисляется как сумма первой и третьей цифр и модуля разности второй и четвёртой цифр.
2.
Если число N начинается с нечётной цифры, то цифры числа N располагают в неубывающем порядке. Число R вычисляется как сумма цифр в двоичной записи полученного числа. Сколько существует чисел N, для которых результат работы алгоритма будет
более 20?
Предложенное решение
def alg( n ):
s = str(n)
if (n // 1000) % 2 == 0:
R = int(s[0]) + int(s[2]) + abs(int(s[1]) - int(s[3]))
else:
s = ''.join(sorted(s))
b = f"{int(s):b}"
R = sum( int(d) for d in b )
return R
count = 0
for i in range(1000, 10000):
if alg(i) > 20:
count += 1
print( count )
с одной стороны слишком длинновато, когда дорога каждая минута.
С другой стороны,у нас же не конкурс программистов по написанию программ, соответствующих заданному алгоритму,стало быть, можно включать голову, если она есть...!
Вопрос: "Сколько существует чисел N, для которых результат работы алгоритма будет
более 20?"
Причем пункт 2) гласит - "Если число N начинается с нечётной цифры, то цифры числа N располагают в неубывающем порядке. Число R вычисляется как сумма цифр в двоичной записи полученного числа."
У кого есть желание, конечно, пусть ломают голову над тем как расположить числа в неубывающем порядке, а затем еще и искать сумму единиц в двоичном коде для каждого числа.
А мы знаем, что 2 в 20 степени = 1 048 576, а кто не знает легко проверить командой print(2**20)
Но в условии оговорено, что числа должны быть четырехзначные, стало быть пункт 2) вне нашего диапазона, откуда следует, что решение может быть примерно таким:
k = 0
for i in range(2000,10000):
if (i//1000)%2 == 0:
if i//1000 + (i//10)%10 + abs((i//100)%10 - i%10) > 20:
k += 1
print(k)