小易准备去魔法王国采购魔法神器,购买魔法神器需要使用魔法币,但是小易现在一枚魔法币都没有,但是小易有两台魔法机器可以通过投入x(x可以为0)个魔法币产生更多的魔法币。
魔法机器1:如果投入x个魔法币,魔法机器会将其变为2x+1个魔法币
魔法机器2:如果投入x个魔法币,魔法机器会将其变为2x+2个魔法币
小易采购魔法神器总共需要n个魔法币,所以小易只能通过两台魔法机器产生恰好n个魔法币,小易需要你帮他设计一个投入方案使他最后恰好拥有n个魔法币。
输入包括一行,包括一个正整数n(1 ≤ n ≤ 10^9),表示小易需要的魔法币数量。
输出一个字符串,每个字符表示该次小易选取投入的魔法机器。其中只包含字符'1'和'2'。
10
122
target = int(input())
# 变成偶数那一步一定是用了2,变成奇数那一步一定是用了1
result = []
while target:
if target % 2 == 0:
# 是偶数,用了2
result.append(2)
target = (target - 2) / 2
else:
result.append(1)
target = (target - 1) / 2
for i in range(len(result) - 1, -1, -1):
print(result[i], end='')
def machine1(x): return int((x-1)/2) def machine2(x): return int((x-2)/2) if __name__ == "main": out = [] n = eval(input('请输入几个魔法币\n')) while n: if n%2==1: n = machine1(n) out.append('1') print(n) if n%2==0: n = machine2(n) out.append('2') print('2') out.reverse() res = ''.join(out) print(res)
# 倒推 num = int(input()) res = '' while num > 0: if num % 2 == 0: res = '2' + res num = (num-2)//2 else: res = '1' + res num = (num-1)//2 print(res)
def f1(x): return int((x - 1)/2) def f2(x): return int((x - 2)/2) def s1(n, s): while n % 2 == 1: n = f1(n) s = s + '1' return n, s def s2(n, s): while n % 2 == 0 and n != 0: n = f2(n) s = s + '2' return n, s n = int(input()) s = '' for i in range(30): # 2**30 > 10**9 if n != 0: if n % 2 == 0: n, s = s2(n, s) elif n % 2 == 1: n, s = s1(n, s) s = s[::-1] print(s)