去哪儿2017校园招聘 开发工程师(第一批次)- 题解
2017-10-09 19:51
381 查看
题目链接:点这里.
这套题目有点味道啊,不算难,但是考验编码技巧,尤其是最后一题,我也是醉了,看人家用Python的,直接调用库函数,几行代码就搞定了,看来Python大法还是牛啊,C++写了好长的代码.
,然后再给你一串字符,问你这些字符在图上是不是连通的.
,编号的规则如图所示,现在站在第一个结点上,然后给你一串字符串,里面有‘L’、‘R’、‘B’,分别表示向左子树走,向右子树走,回退一步,问你最终你站在的那个结点的编号。
,然后给你UTF-8的编码,让你求出Unicode的编码,具体要求看题目
这套题目有点味道啊,不算难,但是考验编码技巧,尤其是最后一题,我也是醉了,看人家用Python的,直接调用库函数,几行代码就搞定了,看来Python大法还是牛啊,C++写了好长的代码.
第一题
题目:联通图形
给你一个图片,如图,然后再给你一串字符,问你这些字符在图上是不是连通的.
解析:
遍历每个字符,看看当前字符是否和整个字符中的某一个字符相邻,如果每个字符都和某个字符相邻,那么就是连通的.代码:
#include <bits/stdc++.h> using namespace std; int getNum(char c) { if (isdigit(c)) return c - '0'; return c - 'a' + 10; } int main() { while (true) { string strs; while (true) { char c, d; if (EOF == scanf("%c%c", &c, &d)) goto F; strs.push_back(c); if (d == '\n') break; } if (strs.size() == 1) { cout << "pong" << endl; continue; } bool verify = true; for (int i = 0; i < strs.size(); i++) { int tag = getNum(strs[i]); bool isOk = false; for (int j = 0; j < strs.size(); j++) { if (i == j) continue; int v = getNum(strs[j]); if (tag - v == 1 || v - tag == 1 || tag - v == 4 || v - tag == 4) { isOk = true; break; } } if (!isOk) { verify = false; break; } } cout << (verify ? "pong" : "pang") << endl; } F:; return 0; }
第二题:循环二叉树
题目:
给你一颗二叉树,如图,编号的规则如图所示,现在站在第一个结点上,然后给你一串字符串,里面有‘L’、‘R’、‘B’,分别表示向左子树走,向右子树走,回退一步,问你最终你站在的那个结点的编号。
解析:
首先,特定编号的结点,它的左右子树的编号是确定的,因此我们先预处理下这个地方,搞一个数组映射一下;其次要回退,而且回退不止一步,所以,我们用一个栈保存我们走过的结点的编号,这样,如果回退就退栈。代码:
#include <bits/stdc++.h> using namespace std; // 0 : L 1 : R const int path[6][2] = { {0, 0}, {2, 3}, {3, 4}, {4, 5}, {5, 1}, {1, 2} }; int main() { string strs; while (cin >> strs) { int now = 1; stack<int> paths; paths.push(1); for (decltype(strs.size()) i = 0; i < strs.size(); i++) { if (strs[i] == 'B') { if (!paths.empty()) now = paths.top(), paths.pop(); } else paths.push(now), now = strs[i] == 'L' ? path[now][0] : path[now][1]; } cout << now << endl; } return 0; }
第三题:Utf8编码器
题目:
给你一个unicode对应utf8的转码规则的图,如图,然后给你UTF-8的编码,让你求出Unicode的编码,具体要求看题目
解析:
没什么技巧,直接if-else语句开搞就是了,代码比较多和长,因此要注意细节,看代码吧。代码:
#include <bits/stdc++.h> using namespace std; string getBinary(int x) { string ret; for (int i = 0; i < 8; i++, x /= 2) ret.push_back((char)(x % 2 + '0')); reverse(ret.begin(), ret.end()); return ret; } unsigned int getNum(string s) { unsigned int ret = 0; for (decltype(s.size()) i = 0; i < s.size(); i++) ret = ret * 2 + s[i] - '0'; return ret; } int main() { while (true) { vector<int> arr; int n; char c; while (true) { if (EOF == scanf("%d%c", &n, &c)) goto F; arr.push_back(n); if (c == '\n') break; } vector<unsigned int> ans; bool isOk = true; for (decltype(arr.size()) i = 0; i < arr.size(); i++) { string s1 = getBinary(arr[i]); if (0 == s1.compare(0, 1, "0")) ans.push_back(getNum(s1.substr(1))); else { if (i + 1 < arr.size()) { string s2 = getBinary(arr[i + 1]); if (0 == s1.compare(0, 3, "110") && 0 == s2.compare(0, 2, "10")) { ans.push_back(getNum(s1.substr(3) + s2.substr(2))); i += 1; } else { if (i + 2 < arr.size()) { string s3 = getBinary(arr[i + 2]); if (0 == s1.compare(0, 4, "1110") && 0 == s2.compare(0, 2, "10") && 0 == s3.compare(0, 2, "10")) { ans.push_back(getNum(s1.substr(4) + s2.substr(2) + s3.substr(2))); i += 2; } else { if (i + 3 < arr.size()) { string s4 = getBinary(arr[i + 3]); if (0 == s1.compare(0, 5, "11110") && 0 == s2.compare(0, 2, "10") && 0 == s3.compare(0, 2, "10") && 0 == s4.compare(0, 2, "10")) { ans.push_back(getNum(s1.substr(5) + s2.substr(2) + s3.substr(2) + s4.substr(2))); i += 3; } else { if (i + 4 < arr.size()) { string s5 = getBinary(arr[i + 4]); if (0 == s1.compare(0, 6, "111110") && 0 == s2.compare(0, 2, "10") && 0 == s3.compare(0, 2, "10") && 0 == s4.compare(0, 2, "10") && 0 == s5.compare(0, 2, "10")) { ans.push_back(getNum(s1.substr(6) + s2.substr(2) + s3.substr(2) + s4.substr(2) + s5.substr(2))); i += 4; } else { if (i + 5 < arr.size()) { string s6 = getBinary(arr[i + 5]); if (0 == s1.compare(0, 7, "1111110") && 0 == s2.compare(0, 2, "10") && 0 == s3.compare(0, 2, "10") && 0 == s4.compare(0, 2, "10") && 0 == s5.compare(0, 2, "10") && 0 == s6.compare(0, 2, "10")) { ans.push_back(getNum(s1.substr(7) + s2.substr(2) + s3.substr(2) + s4.substr(2) + s5.substr(2) + s6.substr(2))); d0ba i += 5; } else { isOk = false; break; } } else { isOk = false; break; } } } else { isOk = false; break; } } } else { isOk = false; break; } } } else { isOk = false; break; } } } else { isOk = false; break; } } } if (!isOk) puts("no"); else { for (decltype(ans.size()) i = 0; i < ans.size(); i++) printf("%u%c", ans[i], i == ans.size() - 1 ? '\n' : ' '); } } F:; return 0; }
相关文章推荐
- [动态规划] 广联达2017校园招聘 软件开发工程师笔试题
- 京东2017校园招聘Android研发工程师编程题(二):幸运数
- [置顶] 2017 暑期实习校园招聘(Java后台开发方向)面经分享
- PPS 2013年校园招聘C++开发工程师笔试题
- 2015数码视讯校园招聘JAVA开发工程师笔试题
- 金蝶软件校园招聘Java开发工程师笔试面试情况分享
- 校园招聘-2017携程秋招后台开发笔试编程题
- 2017秋季校园招聘iOS开发岗位面试题集锦
- 百世集团2016校园招聘开发工程师笔试试卷
- 2016年美团校园招聘数据开发工程师笔试编程题
- 网易2017实习生招聘笔试题 C++开发工程师
- 2015数码视讯校园招聘JAVA开发工程师笔试题
- 2017拼多多校园招聘-系统运维工程师
- 阿里巴巴2015秋季校园招聘前端开发工程师在线笔试题及答案
- IBM的校园招聘计划中包括SOA软件开发工程师等职位
- 阿里巴巴2015秋季校园招聘前端开发工程师在线笔试题及答案
- 2017携程java后台开发工程师暑期实习生招聘面试经验分享
- 雅虎2014校园招聘软件开发工程师笔试试题,选择题第七题
- 2011金山软件校园招聘 C++开发工程师 笔试题