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




#笔试题目##网易##吐槽#
全部评论

相关推荐

评论
3
11
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务