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;
}