网易2018校园招聘编程真题之魔法币

本文分享了网易2018年校园招聘笔试中的一道编程真题——魔法币问题。文章详细阐述了解题思路,并提供了C++代码实现,帮助读者理解并解决此类问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

  小易准备去魔法王国采购魔法神器,购买魔法神器需要使用魔法币,但是小易现在一枚魔法币都没有,
  但是小易有两台魔法机器可以通过投入x(x可以为0)个魔法币产生更多的魔法币。
  魔法机器1:如果投入x个魔法币,魔法机器会将其变为2x+1个魔法币
  魔法机器2:如果投入x个魔法币,魔法机器会将其变为2x+2个魔法币
  小易采购魔法神器总共需要n个魔法币,所以小易只能通过两台魔法机器产生恰好n个魔法币,
  小易需要你帮他设计一个投入方案使他最后恰好拥有n个魔法币。 

输入描述:

  输入包括一行,包括一个正整数n(1 ≤ n ≤ 10^9),表示小易需要的魔法币数量。

输出描述:

  输出一个字符串,每个字符表示该次小易选取投入的魔法机器。其中只包含字符'1'和'2'。

输入例子1:

   10

输出例子1:

   122

解题思路

 本题一上来看题目会使人莫名其妙,个人觉得题目有漏洞,不够严谨。首先他只要求恰好产生n个魔法币,
 其次如果不能每次都投入0个(这样太取巧),那么可能产生n个就会有多种选择,
 其也没有说明多种选择时输出哪种选择。所以刚上来题目很让人迷惑。
 开始时以为会用到动态规划或者其他比较麻烦的算法,其实仔细看这两个产生式你会发现,机器1产生奇数,
 机器2产生偶数。在每次都把当前所有的魔法币投入机器的前提下,这道题目就是不断逆着求解方程罢了。
 在求解的过程中记录机器序号。
 编完程序,运行通过,所以题目条件还是精确点好。

代码块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值