天天看点

2017春招去哪儿笔试

不是很难,但是 lz 很菜。。。

第一题

2017春招去哪儿笔试
2017春招去哪儿笔试

题解

#include <iostream>
#include <stdlib.h>  
#include <stdio.h>  
#include <queue>
#include <string.h>
#define N 1000
using namespace std; 
typedef struct BiTNode    
{    
    int data;    
    struct BiTNode *lchild,*rchild;    
} BiTNode,* BITree;      
void LevelOrderTraversal(BiTNode* R1){
    queue<BiTNode*> Q;
    int flag=;
    BiTNode* T;
    T=R1;
    int i=;
    if (R1==NULL) {
        return;
    }
    Q.push(T);  
    while (!Q.empty()) {
        T=Q.front();
            if (!flag) {
                    flag=;
                }else {
                    cout<<" ";
                }
                cout<<T->data;
                Q.pop();
            if (T->lchild!=NULL) {
                Q.push(T->lchild);
            }       
            if (T->rchild!=NULL) {
                Q.push(T->rchild);
            }   

    }
}

BiTNode* createBiTree(int *pre, int *in, int n)  
{  
    int i = ;  
    int n1 = ,n2 = ;  
    int m1 = ,m2 = ;  
    BiTNode*node = NULL;  
    int lpre[N],rpre[N];  
    int lin[N],rin[N];  
    if (n == )  
    {  
        return NULL;  
    }  
    node = (BiTNode*)malloc(sizeof(BiTNode));    
    if (node==NULL)    
    {    
        return NULL;    
    }    
    memset(node,,sizeof(BiTNode));   
    node->data = pre[];  
    for (i = ;i<n;i++)  
    {  
        if ((i<=n1)&&(in[i]!=pre[]))  
        {  
            lin[n1++] = in[i];  
        }  
        else if(in[i]!=pre[])  
        {  
            rin[n2++] = in[i];  
        }  
    }  
    for (i = ;i < n;i++)  
    {  
        if (i< (n1+)) 
        {  
            lpre[m1++] = pre[i];  
        }  
        else  
        {  
            rpre[m2++] = pre[i];  
        }  
    }  
    node->lchild = createBiTree(lpre,lin,n1);  
    node->rchild = createBiTree(rpre,rin,n2);  

    return node;  
}  

int main()  
{  
    int m;
    cin>>m;
    int preNode[m];  
    int inNode[m];  
    int ch;  
    BiTNode* root=NULL;  
    for(int i=;i<m;i++){
        cin>>preNode[i];
    }
    for(int i=;i<m;i++){
        cin>>inNode[i];
    }
    root = createBiTree(preNode,inNode,m);  
    LevelOrderTraversal(root);
    return ;  
}  
           

第二题

是一个进制转换,以 0-25 来表示 a-z,26 进制输入一个字符串将其转换成 10 进制并输出,lz 用 java 写的,但是只过了 80% 的测试用例。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        String buffer=null;
        Scanner sc=new Scanner(System.in);
        while(sc.hasNextLine())
        {
            buffer=sc.nextLine();

            if(buffer.startsWith("a")){
                System.out.println();
            }
            else{
                System.out.println(letterToNum(buffer));
            }



        }


    }

    public static long letterToNum(String str) {

        char[] letter = str.toUpperCase().toCharArray(); // 拆分字符串
        //System.out.println(letter[0]);
        long reNum = ;
        int power = ;
        int num = letter.length;
        //System.out.println(num);
        // 得到最后一个字母的尾数值
        reNum += charToNum(letter[num - ]);
        //System.out.println(reNum);

        if (num >= ) {
            for (int i = num - ; i > ; i--) {
                power = ;
                for (int j = ; j < i; j++) // 幂,j次方,应该有函数
                {
                    power *= ;
                }
                reNum += (power * (charToNum(letter[num - i - ]))); // 最高位需要加1,中间位数不需要加一

            }
        }
        return reNum;
    }
    private static int charToNum(char ch) {

        return ch - 'A';
    }

}
           

第三题没来地看,但是有人说是leetcode的原题,平时代码敲得少。。。