小米2016/9/23部分笔试题目

2016年9月23日, 星期五
1、 中序序列为 ABCDEFG  后序序列为 BDCAFGE   左子树中结点数为多少?(4)
2、用二进制0/1串对字符串 “babacada”进行编码,需要根据这个编码,能够解码回原来的字符串,最适合需要多长的二进制字符串?(14)


3、 树的高度  

时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB

题目描述:

现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度

输入

输入的第一行表示节点的个数n1<=n<=1000,节点的编号为0n-1)组成,

下面是n-1行,每行有两个整数,第一个数表示父节点的编号,第二个数表示子节点的编号

输出

输出树的高度,为一个整数

 

样例输入

5

0 1

0 2

1 3

1 4

样例输出

3

 

Hint


(Java答案)
 package com.company;

import java.util.Scanner;

public class Main {

    public static int n;
    public static int left[] = new int[1000];
    public static int right[] = new int[1000];

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        n = scanner.nextInt();

        for(int i = 0; i < n; i++){
            left[i] = -1;
            right[i] = -1;
        }
        scanner.nextLine();

        boolean ifChild[] = new boolean[n];

        for(int i = 0; i < n - 1; i++) {
             String line = scanner.nextLine();
             int r = Integer.parseInt(line.split(" ")[0]);
             int child = Integer.parseInt(line.split(" ")[1]);
                if (left[r] == -1) {
                    left[r] = child;
                } else {
                    right[r] = child;
                }
            ifChild[child] = true;
        }

        int rootNum = 0;
        for (int i = 0; i < n; i++){
            if(ifChild[i] == false){
                rootNum = i;
                break;
            }
        }

        System.out.println(height(rootNum));
    }
    public static int height(int root){

        if(root == -1){
            return 1;
        }

        int leftheight = height(left[root]);
        int rightheight = height(right[root]);

        return leftheight > rightheight ? leftheight : rightheight + 1;
    }
}





4、 句子反转

时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB

题目描述:

给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割单词之间只有一个空格,前后没有空格。

比如:

1 “hello xiao mi”-> “mi xiao hello”

输入

输入数据有多组,每组占一行,包含一个句子(句子长度小于1000个字符)

输出

对于每个测试示例,要求输出句子中单词反转后形成的句子

 

样例输入

hello xiao mi

样例输出

mi xiao hello



(C++答案)

1.#include <iostream>  

2.#include <string.h>  

3.using namespace std;  

4.int main()  

5.{  

6.    int n,i,j;  

7.    char str[100];  

8.    cin>>n;  

9.    getchar();  

10.     while(n--)  

11.     {  

12.         gets(str);  

13.         int len=strlen(str);  

14.         for(i=0,j=len-1;i<=j;i++,j--)  

15.         {  

16.             char temp=str[i];  

17.             str[i]=str[j];  

18.             str[j]=temp;  

19.         }  

20.         j=0;  

21.         int k,p;  

22.         for(i=0;i<=len;i++)  

23.         {  

24.             if(str[i]==' '||str[i]=='\0')  

25.             {  

26.                 for(k=j,p=i-1;k<p;k++,p--)  

27.                 {  

28.                     char temp=str[k];  

29.                     str[k]=str[p];  

30.                     str[p]=temp;  

31.                 }  

32.                 j=i+1;  

33.             }  

34.         }  

35.         for(i=0;i<len;i++)  

36.             cout<<str[i];  

37.         cout<<endl;  

38.     }  

39.     return 0;  

}  



   

5、 电话号码分身

时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB

题目描述:

首先将电话号码中的每个数字加上8取个位,然后使用对应的大写字母代替

"ZERO", "ONE", "TWO", "THREE", "FOUR", 

"FIVE", "SIX", "SEVEN", "EIGHT", "NINE"),

然后随机打乱这些字母,所生成的字符串即为电话号码对应的分身。

输入

第一行是一个整数T1<=T<=100)表示测试样例数;接下来T行,每行给定一个分身后的电话号码的分身(长度在310000之间)。

输出

输出T行,分别对应输入中每行字符串对应的分身前的最小电话号码(允许前导0)。

 

样例输入

4

EIGHT

ZEROTWOONE

OHWETENRTEO

OHEWTIEGTHENRTEO

样例输出

0

234

345

0345

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值