華為校招軟體上機考試題目解析
阿新 • • 發佈:2019-02-01
轉載請註明出處:
華為校招軟體上機考試,技術崗需要軟體上機考試。
總共三道題。
題目 | 分數 | 可以提交次數 |
---|---|---|
迴文數字判斷 | 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]);
}
}
}
}