去哪儿网2017春招在线笔试

第一题,给二叉树的先序遍历和中序遍历,求层序遍历。

这个。。。大二做的。。。

根据先序和中序的性质,先序第一个节点一定是根,在中序中找到根的位置,左边的就是左子树,右边的就是右子树,递归就好。

递归建好树  层先遍历需要通过队列实现。

#include <bits/stdc++.h>

using namespace std;

struct bi_tree {
    int val;
    bi_tree *left, *right;
};

bi_tree *build_tree(int a[], int b[], int n) {
    bi_tree *root = new bi_tree();
    root->val = a[0];
    for (int i = 0; i < n; ++i) {
        if (b[i] == a[0]) {    // root
            if (i == 0) {      // left child tree is null
                root->left = nullptr;
            } else {
                root->left = build_tree(a+1, b, i);
            }

            if (i == n - 1) {     // right child tree is null
                root->right = nullptr;
            } else {
                root->right = build_tree(a+i+1, b+i+1, n-i-1);
            }
        }
    }
    return root;
}

void print(bi_tree *root) {
    queue<bi_tree *> que;
    que.push(root);
    bool fir = true;
    while (que.size()) {
        bi_tree *now = que.front();
        que.pop();
        if (fir) fir = false; else printf(" ");
        printf("%d", now->val);
        if (now->left) que.push(now->left);
        if (now->right) que.push(now->right);
    }
}

int main()
{
    int n;
    int a[1000], b[1000];

    cin >> n;
    for (int i = 0; i < n; ++i) scanf("%d", a+i);
    for (int i = 0; i < n; ++i) scanf("%d", b+i);

    bi_tree *root = build_tree(a, b, n);

    print(root);

    return 0;
}

第二题,进制转化

这个。。。。大水了。。。

#include <bits/stdc++.h>

using namespace std;

char str[1000];

int main()
{
    while (cin >> str) {
        long long ans = 0;
        int n = strlen(str);
        for(int i = 0; i < n; ++i) {
            ans = ans * 26 + str[i] - ‘a‘;
        }
        cout << ans << endl;
    }
    return 0;
}

第三题,单词变换

两个单词如果只有一个字母不相同,那么他们之间的路径为1,否则为无限大,然后求最短路就好了。。。。

虽然没写数据范围,但根据我去年做去哪儿笔试的经验。。。。肯定不会很大。。。。。所以随便Floyd就好了。。。

#include <bits/stdc++.h>

using namespace std;

string s, t;
string dir[1000];
int graph[1000][1000];

bool cmp(string a, string b) {
    int cnt = 0;
    for (int i = 0; i < a.length(); ++i) {
        if (a[i] != b[i]) {
            if (cnt == 0) cnt++;
            else return false;
        }
    }
    return true;
}

int main()
{
    // freopen("in.txt", "r", stdin);
    cin >> s >> t;
    int n = 0;
    int e;
    for (; cin >> dir[n]; n++) {
        if (dir[n] == t) e = n;
    }
    dir[n++] = s;

    for (int i = 0; i < n; ++i) {
        for (int j = i; j < n; ++j) {
            if (i == j) graph[i][j] = 0;
            else if ( cmp(dir[i], dir[j]) ) graph[i][j] = graph[j][i] = 1;
            else graph[i][j] = graph[j][i] = 1000000;
        }
    }

    for (int k = 0; k < n; ++k) {
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                if (graph[i][k] + graph[k][j] < graph[i][j]) {
                    graph[i][j] = graph[i][k] + graph[k][j];
                }
            }
        }
    }

    printf("%d", graph[n-1][e]+1);

    return 0;
}
时间: 2024-11-03 21:32:18

去哪儿网2017春招在线笔试的相关文章

2、赶去公司--网易2017春招

[编程题] 赶去公司 时间限制:1秒 空间限制:32768K 终于到周末啦!小易走在市区的街道上准备找朋友聚会,突然服务器发来警报,小易需要立即回公司修复这个紧急bug.假设市区是一个无限大的区域,每条街道假设坐标是(X,Y),小易当前在(0,0)街道,办公室在(gx,gy)街道上.小易周围有多个出租车打车点,小易赶去办公室有两种选择,一种就是走路去公司,另外一种就是走到一个出租车打车点,然后从打车点的位置坐出租车去公司.每次移动到相邻的街道(横向或者纵向)走路将会花费walkTime时间,打车

网易2017春招笔试真题编程题集合题解

01 双核处理 题目 一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务.n个任务可以按照任意顺序放入CPU进行处理,现在需要设计一个方案让CPU处理完这批任务所需的时间最少,求这个最小的时间. 输入描述 输入包括两行:第一行为整数n(1 ≤ n ≤ 50)第二行为n个整数lengthi,表示每个任务的长度为length[i]kb,每个数均为1024的倍数. 输出描述输出一个整数,表示最少需

去哪儿网2017校招在线笔试(前端工程师)编程题及JavaScript代码

编程题很简单.整个试卷结构为: 一.问答题: 对前端的理解,了解哪些框架库? 二.在线编程题:身份证分组 如下第一道:身份证分组 三.在线编程题:身份证分组.统计字符.酒店价格(三选二) 如下第二三四道题中三选二作答. 我也搞不懂为什么有两部分编程题~~~下面详细说一说编程题目及JS代码实现: 第一道:身份证分组 代码: 1 var line; 2 while(line = read_line()){ 3 while(line.indexOf(" ") != -1){ 4 line =

网易2017春招笔试真题编程题集合——赶去公司

时间限制:1秒 空间限制:32768K 终于到周末啦!小易走在市区的街道上准备找朋友聚会,突然服务器发来警报,小易需要立即回公司修复这个紧急bug.假设市区是一个无限大的区域,每条街道假设坐标是(X,Y),小易当前在(0,0)街道,办公室在(gx,gy)街道上.小易周围有多个出租车打车点,小易赶去办公室有两种选择,一种就是走路去公司,另外一种就是走到一个出租车打车点,然后从打车点的位置坐出租车去公司.每次移动到相邻的街道(横向或者纵向)走路将会花费walkTime时间,打车将花费taxiTime

蘑菇街2017春招笔试

现在有一个n个证书的序列,交换两个相邻的数的位置直到整个序列按照升序排列, 那么将整个序列排好需要交换多少次? 例如 1,2,3,5,4 只需要交换一次即可. 第一行输入一个正整数n(n<100),表述数字序列元素个数,占一行: 接下来一行输入从1到n的n个整数序列,中间用空格隔开 输入: 4 4 3 2 1输出: 6 1 /************************************************************************* 2 > File Na

百度2017春招笔试真题编程题之有趣的排序

问题描述: 度度熊有一个N个数的数组,他想将数组从小到大 排好序,但是萌萌的度度熊只会下面这个操作: 任取数组中的一个数然后将它放置在数组的最后一个位置. 问最少操作多少次可以使得数组从小到大有序? 输入描述: 首先输入一个正整数N,接下来的一行输入N个整数.(N <= 50, 每个数的绝对值小于等于1000) 输出描述: 输出一个整数表示最少的操作次数. 示例1 输入 4 19 7 8 25 输出 2-----------------------------------------------

百度2017春招笔试真题编程题集合之寻找三角形

题目描述 三维空间中有N个点,每个点可能是三种颜色的其中之一,三种颜色分别是红绿蓝,分别用'R', 'G', 'B'表示. 现在要找出三个点,并组成一个三角形,使得这个三角形的面积最大.但是三角形必须满足:三个点的颜色要么全部相同,要么全部不同. 输入描述: 首先输入一个正整数N三维坐标系内的点的个数.(N <= 50) 接下来N行,每一行输入 c x y z,c为'R', 'G', 'B' 的其中一个.x,y,z是该点的坐标.(坐标均是0到999之间的整数) 输出描述: 输出一个数表示最大的三

网易2017春招笔试真题编程题集合(8)——奇怪的表达式求值

常规的表达式求值,我们都会根据计算的优先级来计算.比如*/的优先级就高于+-.但是小易所生活的世界的表达式规则很简单,从左往右依次计算即可,而且小易所在的世界没有除法,意味着表达式中没有/,只有(+, - 和 *).现在给出一个表达式,需要你帮忙计算出小易所在的世界这个表达式的值为多少 输入描述: 输入为一行字符串,即一个表达式.其中运算符只有-,+,*.参与计算的数字只有0~9. 保证表达式都是合法的,排列规则如样例所示. 输出描述: 输出一个数,即表达式的值 输入例子: 3+5*7 输出例子

网易2017春招笔试真题编程题集合(7)——集合

小易最近在数学课上学习到了集合的概念,集合有三个特征:1.确定性 2.互异性 3.无序性.小易的老师给了小易这样一个集合:S = { p/q | w ≤ p ≤ x, y ≤ q ≤ z }需要根据给定的w,x,y,z,求出集合中一共有多少个元素.小易才学习了集合还解决不了这个复杂的问题,需要你来帮助他. 输入描述: 输入包括一行: 一共4个整数分别是w(1 ≤ w ≤ x),x(1 ≤ x ≤ 100),y(1 ≤ y ≤ z),z(1 ≤ z ≤ 100).以空格分隔 输出描述: 输出集合中