您的位置:首页 > 编程语言

网易2018校园招聘编程题真题集合1魔法币

2017-12-12 20:59 489 查看




一开始没有理解题意:这道题是说,每次把手头上的魔法币全都投入。

这道题一开始用了回溯,只通过80%,大数据通不过。

#include <iostream>
#include <string>
using namespace std;
bool helper(int need, int have, string &s)
{
if(need == 0) return true;
if(need < 0) return false;
s.push_back('1');
if(helper(need - have - 1, 2 * have + 1, s))
return true;
s.pop_back();
s.push_back('2');
if(helper(need - have - 2, 2 * have + 2, s))
return true;
s.pop_back();
return false;
}
int main()
{
int n;
while(cin >> n){
string s;
helper(n, 0, s);
cout << s << endl;
}
}

后来看了别人的思路,才发现应该好好利用机器1产生的是奇数,机器2产生的是偶数这个隐含条件。如果n是偶数,说明最后一次一定是用了机器2,那么倒数第二次之后剩下的一定是(n-2)/2.
#include <iostream>
#include <string>
using namespace std;
int main()
{
int n;
cin >> n;
string s= ("");
while( n )
{
if( n % 2 )
{
n = (n-1)/2;
s = '1'+ s ;
}
else
{
n = (n-2)/2;
s = '2'+ s;
}
}
cout << s;
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  网易 校园招聘