2017春招去哪儿笔试

来源:互联网 发布:网络大电影方案 编辑:程序博客网 时间:2024/05/18 07:27

不是很难,但是 lz 很菜。。。
第一题
这里写图片描述
这里写图片描述

题解

#include <iostream>#include <stdlib.h>  #include <stdio.h>  #include <queue>#include <string.h>#define N 1000using namespace std; typedef struct BiTNode    {        int data;        struct BiTNode *lchild,*rchild;    } BiTNode,* BITree;      void LevelOrderTraversal(BiTNode* R1){    queue<BiTNode*> Q;    int flag=0;    BiTNode* T;    T=R1;    int i=0;    if (R1==NULL) {        return;    }    Q.push(T);      while (!Q.empty()) {        T=Q.front();            if (!flag) {                    flag=1;                }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 = 0;      int n1 = 0,n2 = 0;      int m1 = 0,m2 = 0;      BiTNode*node = NULL;      int lpre[N],rpre[N];      int lin[N],rin[N];      if (n == 0)      {          return NULL;      }      node = (BiTNode*)malloc(sizeof(BiTNode));        if (node==NULL)        {            return NULL;        }        memset(node,0,sizeof(BiTNode));       node->data = pre[0];      for (i = 0;i<n;i++)      {          if ((i<=n1)&&(in[i]!=pre[0]))          {              lin[n1++] = in[i];          }          else if(in[i]!=pre[0])          {              rin[n2++] = in[i];          }      }      for (i = 1;i < n;i++)      {          if (i< (n1+1))         {              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=0;i<m;i++){        cin>>preNode[i];    }    for(int i=0;i<m;i++){        cin>>inNode[i];    }    root = createBiTree(preNode,inNode,m);      LevelOrderTraversal(root);    return 0;  }  

第二题

是一个进制转换,以 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(0);            }            else{                System.out.println(letterToNum(buffer));            }        }    }    public static long letterToNum(String str) {        char[] letter = str.toUpperCase().toCharArray(); // 拆分字符串        //System.out.println(letter[0]);        long reNum = 0;        int power = 1;        int num = letter.length;        //System.out.println(num);        // 得到最后一个字母的尾数值        reNum += charToNum(letter[num - 1]);        //System.out.println(reNum);        if (num >= 2) {            for (int i = num - 1; i > 0; i--) {                power = 1;                for (int j = 0; j < i; j++) // 幂,j次方,应该有函数                {                    power *= 26;                }                reNum += (power * (charToNum(letter[num - i - 1]))); // 最高位需要加1,中间位数不需要加一            }        }        return reNum;    }    private static int charToNum(char ch) {        return ch - 'A';    }}

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

0 0
原创粉丝点击