1. 程式人生 > >華為校招軟體上機考試題目解析

華為校招軟體上機考試題目解析

轉載請註明出處:

華為校招軟體上機考試,技術崗需要軟體上機考試。

總共三道題。

題目 分數 可以提交次數
迴文數字判斷 100 5
字串排序 200 5
整數排序 300 5

第一題 迴文數字判斷

描述: 有這樣一類數字,他們順著看和倒著看是相同的數,例如:121,656,2332等,這樣的數字就稱為:迴文數字。判斷某數字是否是迴文數字。
執行時間限制: 10 Sec
記憶體限制: 128 MByte
輸入: 整型數字
輸出: 0:不是迴文數字;1:是迴文數字。
樣例輸入: 121
樣例輸出: 1

解題思路

:從頭部和尾部比較,如果相同,則為迴文數字,只要有一個不同,則不是迴文數字。

import java.util.*;

public class Main
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        int a;
        while (cin.hasNext())
        {
            a = cin.nextInt();
            System.out.println(isPalindromeNumber(String.valueOf(a)) ? 1
: 0); } } public static boolean isPalindromeNumber(String strIn) { if (strIn == null || strIn.length() < 1) { return false; } char[] numArr = strIn.toCharArray(); boolean isPalidromeNum = true; for (int i = 0; i < numArr.length / 2
; i++) { if (numArr[i] != numArr[numArr.length - 1 - i]) { isPalidromeNum = false; } } return isPalidromeNum; } }

第二題 字串排序

描述: 輸入一個字串,對英文字母按照ASCII碼排序,非英文字母保留原有的位置。輸入字串長度不超過100 。
執行時間限制: 無限制
記憶體限制: 無限制
輸入: 字串
輸出: 排序後的字串
樣例輸入: Wor#d
樣例輸出: Wdo#r

解題思路:先走一遍字串,然後用一個數組儲存出現的字母次數,然後替換掉原來的順序。此方法在字串超長的情況下,效果很好。


import java.util.*;

public class Main
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        String a;
        while (cin.hasNext())
        {
            a = cin.next();
            System.out.println(getAlphabetOrderString(a));
        }
    }

    public static String getAlphabetOrderString(String strIn)
    {
        if (strIn == null || strIn.length() == 0)
        {
            return "";
        }
        char[] strArr = strIn.toCharArray();
        int[] intArr = new int[58];

        for (char c : strArr)
        {
            int tempNum = c - 'A';
            if ((tempNum >= 0 && tempNum < 26) || (tempNum >= 32 && tempNum < 58))
            {
                intArr[c - 'A'] += 1;
            }
        }

        int j = 0;

        for (int i = 0; i < intArr.length; i++)
        {
            while (intArr[i] > 0)
            {
                while (j < strArr.length)
                {
                    if (Character.isLetter(strArr[j]))
                    {
                        strArr[j++] = (char) (i + 'A');
                        intArr[i]--;
                        break;
                    }
                    else
                    {
                        j++;
                    }
                }
            }
        }
        return String.valueOf(strArr);
    }
}

第三題 整數排序

描述: 實現輸入一組大於等於0的整數,根據從小到大的順序排序後輸出,排序後有連續數時,只輸出連續數中最小和最大的兩個數。
執行時間限制: 無限制
記憶體限制: 無限制
輸入: 一組大於等於0的整數,不考慮非法輸入,各個整數之間以逗號(“,”)分隔, 輸入字串的總長度小於等於100個位元組。
輸出: 排序後的值,各個整數之間以空格分隔。
樣例輸入: 1,4,3,110,2,90,7
樣例輸出: 1 4 7 90 110

解題思路:先排序,然後輸出首尾兩個數字,然後中間的數字走一遍,如果和前後的數字不連續,直接輸出,如果和前後的數字連續,繼續向後遍歷直到不連續,輸出字元。


import java.util.*;

public class Main
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        String a;
        while (cin.hasNext())
        {
            a = cin.next();
            String[] intStrArr = a.split(",");
            int[] intArr = new int[intStrArr.length];
            for (int i = 0; i < intArr.length; i++)
            {
                intArr[i] = Integer.parseInt(intStrArr[i]);
            }

            Arrays.sort(intArr);

            if (intArr.length == 0)
            {
                System.out.println("");
            }
            else if (intArr.length == 1)
            {
                System.out.println(intArr[0]);
            }
            else if (intArr.length == 2 && intArr[0] == intArr[1])
            {
                System.out.println(intArr[0]);
            }
            else
            {
                System.out.print(intArr[0] + " ");

                for (int i = 1; i < intArr.length - 1; i++)
                {

                    if ((intArr[i] == intArr[i + 1] - 1) && intArr[i] == intArr[i - 1] + 1)
                    {
                        continue;
                    }

                    System.out.print(intArr[i] + " ");

                }

                System.out.print(intArr[intArr.length - 1]);
            }

        }
    }

}