[编程题] 魔法币 网易2018校招

小易准备去魔法王国采购魔法神器,购买魔法神器需要使用魔法币,但是小易现在一枚魔法币都没有,但是小易有两台魔法机器可以通过投入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

解题思路:2*0+1=1 1*2+2=4 4*2+2-10     对应122     用过判断奇数偶数推用的机器号,典型的递归。

#include<iostream>
using namespace std;
void judge(int n)
{
if(n)
{
if(n%2==0)
{
n=(n-2)/2;
judge(n);
cout<<2;
}
else
{
n=(n-1)/2;
judge(n);
cout<<1;
}
}
}
int main()
{
int n;
cin>>n;
judge(n);
return 0;
}

时间: 2024-10-11 06:44:30

[编程题] 魔法币 网易2018校招的相关文章

[编程题] 重排数列 网易2018校招

小易有一个长度为N的正整数数列A = {A[1], A[2], A[3]..., A[N]}.牛博士给小易出了一个难题:对数列A进行重新排列,使数列A满足所有的A[i] * A[i + 1](1 ≤ i ≤ N - 1)都是4的倍数.小易现在需要判断一个数列是否可以重排之后满足牛博士的要求. 输入描述: 输入的第一行为数列的个数t(1 ≤ t ≤ 10), 接下来每两行描述一个数列A,第一行为数列长度n(1 ≤ n ≤ 10^5) 第二行为n个正整数A[i](1 ≤ A[i] ≤ 10^9) 输

[编程题] 相反数 网易2018校招

为了得到一个数的"相反数",我们将这个数的数字顺序颠倒,然后再加上原先的数得到"相反数".例如,为了得到1325的"相反数",首先我们将该数的数字顺序颠倒,我们得到5231,之后再加上原先的数,我们得到5231+1325=6556.如果颠倒之后的数字有前缀零,前缀零将会被忽略.例如n = 100, 颠倒之后是1. 输入描述: 输入包括一个整数n,(1 ≤ n ≤ 10^5) 输出描述: 输出一个整数,表示n的相反数 输入例子1: 1325 输出例

[编程题] 字符串碎片 网易2018校招

一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的.例如,"aaabbaaac"是由下面碎片组成的:'aaa','bb','c'.牛牛现在给定一个字符串,请你帮助计算这个字符串的所有碎片的平均长度是多少. 输入描述: 输入包括一个字符串s,字符串s的长度length(1 ≤ length ≤ 50),s只含小写字母('a'-'z') 输出描述: 输出一个整数,表示所有碎片的平均长度,四舍五入保留两位小数. 如样例所示: s = "aaabbaaac" 所

[编程题] 疯狂队列 网易2018

小易老师是非常严厉的,它会要求所有学生在进入教室前都排成一列,并且他要求学生按照身高不递减的顺序排列.有一次,n个学生在列队的时候,小易老师正好去卫生间了.学生们终于有机会反击了,于是学生们决定来一次疯狂的队列,他们定义一个队列的疯狂值为每对相邻排列学生身高差的绝对值总和.由于按照身高顺序排列的队列的疯狂值是最小的,他们当然决定按照疯狂值最大的顺序来进行列队.现在给出n个学生的身高,请计算出这些学生列队的最大可能的疯狂值.小易老师回来一定会气得半死. 输入描述: 输入包括两行,第一行一个整数n(

[编程题] 堆棋子 网易2018

小易将n个棋子摆放在一张无限大的棋盘上.第i个棋子放在第x[i]行y[i]列.同一个格子允许放置多个棋子.每一次操作小易可以把一个棋子拿起并将其移动到原格子的上.下.左.右的任意一个格子中.小易想知道要让棋盘上出现有一个格子中至少有i(1 ≤ i ≤ n)个棋子所需要的最少操作次数. 输入描述: 输入包括三行,第一行一个整数n(1 ≤ n ≤ 50),表示棋子的个数 第二行为n个棋子的横坐标x[i](1 ≤ x[i] ≤ 10^9) 第三行为n个棋子的纵坐标y[i](1 ≤ y[i] ≤ 10^

[编程题] 操作序列 网易2018

小易有一个长度为n的整数序列,a_1,...,a_n.然后考虑在一个空序列b上进行n次以下操作:1.将a_i放入b序列的末尾2.逆置b序列小易需要你计算输出操作n次之后的b序列. 输入描述: 输入包括两行,第一行包括一个整数n(2 ≤ n ≤ 2*10^5),即序列的长度. 第二行包括n个整数a_i(1 ≤ a_i ≤ 10^9),即序列a中的每个整数,以空格分割. 输出描述: 在一行中输出操作n次之后的b序列,以空格分割,行末无空格. 输入例子1: 4 1 2 3 4 输出例子1: 4 2 1

网易2018校招笔试题-数组能不能满足重排列后任意相邻的元素积都是4的倍数

今天看了一下网易最新的校招笔试题: 小易有一个长度为N的正整数数列A = {A[1], A[2], A[3]..., A[N]}.牛博士给小易出了一个难题:     对数列A进行重新排列,使数列A满足所有的A[i] * A[i + 1](1 ≤ i ≤ N - 1)都是4的倍数.     小易现在需要判断一个数列是否可以重排之后满足牛博士的要求. 代码如下: 1 import java.util.Scanner; 2 3 /** 4 * Created by jy on 2017/9/9. 5

网易秋招校招编程题

网易内推面试凉了,再战正式批笔试,选择和简答略难,编程题很良心,基本就是模拟.找规律,略加思考就能解出来的题目,本弱鸡只有在良心网易笔试才能AK. 1.翻转翻转 这题一开始没思路,ac了后两题后再回来思考,发现只需要判断某个位置周围有几个点,就代表了那个位置会被别的点翻转几次,那么如何求周围有几个点呢? 简单的把位置分成3类: 一类是四个顶点:每个顶点会被翻转4次(加上自己翻转一次). 第二类是四条边(不含顶点):边上的点会被翻转6次. 第三类就是中间部分:中间的每个点会被翻转9次. 因此翻转9

2018 校招在线编程 20题-01

1. 最大乘积(拼多多) 输入 3 4 1 2 输出 24 解题思路: 定义五个数,一个最大,一个次大,一个第三大,一个最小,一个次小.只要找到这五个数,问题就解决了.因为最大乘积只可能是最大*(次大*第三大) 或者是 最大*(最小*次小).时间复杂度O(n),空间复杂度O(1).PS:这道题输入有问题,题目给的样例是直接给了一组数,而此时用例先给了一个数的个数n,然后再给了一组数. 1 #include<bits/stdc++.h> 2 using namespace std; 3 4 in