小米2017校园招聘笔试题

句子反转
时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前后没有空格。
比如:
(1) “hello xiao mi”-> “mi xiao hello”
输入
输入数据有多组,每组占一行,包含一个句子(句子长度小于1000个字符)
输出
对于每个测试示例,要求输出句子中单词反转后形成的句子

样例输入
hello xiao mi
样例输出
mi xiao hello

import java.util.Scanner;

public class Main {

    public static void main(String[] arg) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
            String str = scan.nextLine();
            String[] ss = str.split(" ");
            for (int i = str.length() - 1; i >= 0; i--) {
                System.out.println(ss[i]);
            }
        }
        scan.close();
    }

}

树的高度
时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度
输入
输入的第一行表示节点的个数n(1<=n<=1000,节点的编号为0到n-1)组成,
下面是n-1行,每行有两个整数,第一个数表示父节点的编号,第二个数表示子节点的编号
输出
输出树的高度,为一个整数

样例输入
5
0 1
0 2
1 3
1 4
样例输出
3

import java.util.Arrays;
import java.util.Scanner;

public class Main {

    static int maxDepth;

    private static void init(int[][] matrix,int n) {
        for (int i = 0; i < n; i++) {
            matrix[i][0] = -1;
            matrix[i][1] = -1;
        }
    }

    public static void main(String[] arg) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
            maxDepth = 0;
            int n = scan.nextInt();
            int[][] matrix = new int[n][2];
            init(matrix,n);
            int[] fathers = new int[n];
            Arrays.fill(fathers,-1);
            for (int i = 0,s = n - 1; i < s; i++) {
                int x = scan.nextInt();
                int y = scan.nextInt();
                if (matrix[x][0] == -1) {
                    matrix[x][0] = y;
                }else {
                    matrix[x][1] = y;
                }
                fathers[y] = x;
            }
            int root = -1;
            for (int i = 0; i < n; i++) {
                if (fathers[i] == -1) {
                    root = i;
                }
            }
            dfs(matrix,root,1);
            System.out.println(maxDepth);
        }
        scan.close();
    }

    private static void dfs(int[][] matrix,int father,int depth) {
        if (matrix[father][0] == -1 && matrix[father][1] == -1) {
            maxDepth = Math.max(maxDepth,depth);
            //System.out.println(depth);
            return;
       }
        for (int i = 0; i < 2; i++) {
            if (matrix[father][i] != - 1) {
                dfs(matrix,matrix[father][i],depth +1);
            }
        }
    }

}

电话号码分身
时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
继MIUI8推出手机分身功能之后,MIUI9计划推出一个电话号码分身的功能:首先将电话号码中的每个数字加上8取个位,然后使用对应的大写字母代替
(”ZERO”, “ONE”, “TWO”, “THREE”, “FOUR”,
“FIVE”, “SIX”, “SEVEN”, “EIGHT”, “NINE”),
然后随机打乱这些字母,所生成的字符串即为电话号码对应的分身。
输入
第一行是一个整数T(1<=T<=100)表示测试样例数;接下来T行,每行给定一个分身后的电话号码的分身(长度在3到10000之间)。
输出
输出T行,分别对应输入中每行字符串对应的分身前的最小电话号码(允许前导0)。

样例输入
4
EIGHT
ZEROTWOONE
OHWETENRTEO
OHEWTIEGTHENRTEO
样例输出
0
234
345
0345


import java.util.Arrays;
import java.util.Scanner;

public class Main {

    static char[] numbers = {
            '2', '3', '4', '5', '6', '7', '8', '9', '0', '1'
    };

    public static void main(String[] arg) {
        Scanner scan = new Scanner(System.in);
        String t = scan.nextLine();
        int test = Integer.parseInt(t);
        while (test > 0) {
            --test;
            String str = scan.nextLine();
            char[] telephone = solve(str);
            System.out.println(telephone);
        }
        scan.close();
    }

    private static char[] solve(String str) {
        int len = str.length();
        int[] letters = new int[126];
        for (int i = 0; i < len; i++) {
            ++letters[str.charAt(i)];
        }
        int[] num = new int[10];
        num[0] = letters['Z'];
        num[2] = letters['W'];
        num[4] = letters['U'];
        num[6] = letters['X'];
        num[8] = letters['G'];
        num[3] = letters['H'] - num[8];
        num[5] = letters['F'] - num[4];
        num[7] = letters['S'] - num[6];
        num[1] = letters['O'] - num[0] - num[2] - num[4];
        num[9] = letters['I'] - num[5] - num[6] - num[8];
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 10; i++) {
            while (num[i] > 0) {
                sb.append(numbers[i]);
                --num[i];
            }
        }
        String telephone = sb.toString();
        char[] arr = telephone.toCharArray();
        Arrays.sort(arr);
        return arr;
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值