HW2018校招软件类笔试题

一、

1、题目

输入一个字符串,输出字符串中最长的数字串。如果有多个数字串长度相等且都是最长的,则按照字符串顺序输出最后一个最长的数字串。

2、解答

【code】

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            //输入字符串
            String s = sc.nextLine();

            // 替换字符串中的字母为空格
            String s1 = s.replaceAll("[a-z]", " ");
            // 分割字符串
            String[] strArray = s1.split(" ");
            ///创建HashMap,存储分割的子数字串,key存储长度,value存储数字串
            HashMap<Integer, String> hashMap = new HashMap<>();

            //把字符串中的各个子数字串存入linkedHashMap,key存储长度,value存储数字串.在map中,key不能重复,如果有相同的key,后面添加的值会覆盖前面添加的值
            for (int i = 0; i < strArray.length; i++) {
                if ((strArray[i].length() != 0) && (strArray[i].charAt(0) != ' ')) {
                    hashMap.put(strArray[i].length(), strArray[i]);
                }
            }

            //输出最长的数字串
            int length = 0;
            String num = "";
            for (Integer key : hashMap.keySet()) {
                if (key >= length) {
                    length = key;
                    num = hashMap.get(key);
                }
            }
            System.out.println(num + "," + length);

        }
        sc.close();
    }
}
            

二、

1、题目

输入字节数组长度uiIutputLen, 如:3;

输入字节数组aInputByte,如: 0x62 0x80 0x00 ;

输入解析数值个数uiElementNum,如:2

输入第一个解析数值的位数,如:4

输入第一个解析数值的位数,如:5

输出解析出的第一个数值:5

输出解析出的第二个数值:6

2、输入输出描述

输入:

3
0x62 0x80  0x00
2
4
5

输出:

6
5

2、解答

【code】

import java.util.Scanner;

public class Main1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            //输入字节数组长度uiIutputLen
            int uiIutputLen = sc.nextInt();

            //输入字节数组aInputByte:  0x62 0x80  0x00
            String str = "";
            String[] aInputByte = new String[uiIutputLen];
            for (int i = 0; i < aInputByte.length; i++) {
                aInputByte[i] = sc.next();
                str += aInputByte[i];
            }

            //输入解析数值个数uiElementNum
            int uiElementNum = sc.nextInt();

            //输入各个解析数值的位数
            int[] array = new int[uiElementNum];
            for (int i = 0; i < array.length; i++) {
                array[i] = sc.nextInt();
            }

            //字节数组aInputByte[3]为{0x62, 0x80, 0x00},对应二进制为“0110 0010, 1000 0000, 0000 0000”;

            //去掉16进制数前的0x
            String newStr = str.replaceAll("0x", " ");
            String[] strArray = newStr.split(" ");

            //把16进制数转换成二进制数,并且连接到一起
            String binaryString = "";
            for (int i = 0; i < strArray.length; i++) {
                if ((strArray[i].length() != 0) && (strArray[i].charAt(0) != ' ')) {
                    binaryString += hexString2binaryString(strArray[i]);
                }
            }

            //二进制数转十进制,输出结果
            int begin = 0;
            int end = array[0];

            for (int i = 0; i < uiElementNum; i++) {
                String s = binaryString.substring(begin, end);
                System.out.println(Integer.parseInt(s, 2));

                begin = end;

                //判断有没有超出数组范围
                if ((i + 1) >= uiElementNum) {
                    break;
                }

                end = array[i + 1] + begin;

            }

        }
        sc.close();
    }


    //16进制转2进制
    public static String hexString2binaryString(String hexString) {
        if (hexString == null || hexString.length() % 2 != 0)
            return null;
        String bString = "", tmp;
        for (int i = 0; i < hexString.length(); i++) {
            tmp = "0000"
                    + Integer.toBinaryString(Integer.parseInt(hexString
                    .substring(i, i + 1), 16));
            bString += tmp.substring(tmp.length() - 4);
        }
        return bString;
    }

}

  

原文地址:https://www.cnblogs.com/hezhiyao/p/8619747.html