85分钟网易初级游戏开发工程师代码 三道
感觉网易的笔试有点水...是不是不招人了...
第一题 读进来转成二进制字符串比较即可
#include<iostream> #include<vector> using namespace std; bool IsPalid(int n) { if (n == 0) return true; string s; while (n) { int tmp = n % 2; s.push_back(tmp + '0'); n >>= 1; } bool res = true; int begin = 0; int end = s.length() - 1; while (begin < end) { if(s[begin]!=s[end]){ res = false; break; } begin++; end--; } return res; } int main() { int n, num; cin >> n; for (int i = 0; i < n; i++) { cin >> num; bool res = IsPalid(num); if (res == true) cout << "YES" << endl; else cout << "NO" << endl; } return 0; }第二题 难点其实在建二叉树上
#include<iostream> #include<vector> #include<queue> #include<algorithm> using namespace std; struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) :val(x), left(nullptr), right(nullptr) {} }; bool IsIncrease(TreeNode *root) { if (root == nullptr) return true; queue<TreeNode *> q; int Sum = 0; q.push(root); int res = true; while (!q.empty()) { int n = q.size(); int curSum = 0; for (int i = 0; i < n; i++) { TreeNode *pNode = q.front(); q.pop(); curSum += pNode->val; if (pNode->left != nullptr) q.push(pNode->left); if (pNode->right != nullptr) q.push(pNode->right); } if (Sum >= curSum) { res = false; break; } Sum = curSum; } return res; } int main() { int n, numOfNode,val; cin >> n; for (int i = 0; i < n; i++) { cin >> numOfNode; vector<TreeNode *> Nodes(numOfNode,nullptr); vector<vector<int>> childIndex(numOfNode, vector<int>(2, 0)); for (int j = 0; j < numOfNode; j++) { cin >> val; Nodes[j] = new TreeNode(val); cin >> childIndex[j][0]; cin >> childIndex[j][1]; } vector<bool> IsRoot(numOfNode, true); for (int j = 0; j < numOfNode; j++) { if (childIndex[j][0] != -1) { Nodes[j]->left = Nodes[childIndex[j][0]]; IsRoot[childIndex[j][0]] = false; } if (childIndex[j][1] != -1) { Nodes[j]->right = Nodes[childIndex[j][1]]; IsRoot[childIndex[j][1]] = false; } } int rootIndex; for (int j = 0; j < numOfNode; j++) { if (IsRoot[j] == true){ rootIndex = j; break; } } bool res = IsIncrease(Nodes[rootIndex]); if (res == true) cout << "YES" << endl; else cout << "NO" << endl; } return 0; }第三题 这题就是卡m=0时候的天数,应该是29/(k+1)+1天,一开始写成了30/(k+1)
#include<iostream> #include<vector> using namespace std; int main() { int n, k, m; cin >> n; for (int i = 0; i < n; i++) { cin >> k >> m; int res; if (m == 0) { res = (30-1)/ (k + 1)+1; } else{ res = m; vector<int> dates(m); for (int j = 0; j < m; j++) cin >> dates[j]; if (dates[0] > 1) res += (dates[0] - 1) / (k + 1); if (dates[m - 1] < 30) res += (30 - dates[m - 1]) / (k + 1); for (int j = 0; j < m - 1; j++) { int begin = dates[j] + k + 1; int end = dates[j + 1] - k; while (begin < end) { res++; begin += k + 1; } } } cout << res << endl; } return 0; }