2017華為筆試題2
這是20170823這一場,整體來說還是比較簡單的。
一、寫一個轉換字串的函式
1.1 題目描述
將輸入字串中下標為偶數的字元連成一個新的字串輸出,需要注意兩點:
1. 如果輸入字串的長度超過20,則轉換失敗,返回“ERROR!”字串;
2. 輸入字串只能由0-9數字,小寫a-z和大寫A-Z組成,如果包含其他字元,則轉換失敗,返回“ERROR!”字串。
1.2 程式碼實現
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String string = scanner.nextLine();
if(string.length()>20){
System.out.print("ERROR!");
return;
}
char[] str = string.toCharArray();
char[] output = new char[(str.length+1)/2];
ConvertStr(str, output);
for (int i = 0; i < output.length; i++) {
System.out.print(output[i]);
}
}
public static void ConvertStr(char[] str,char[] output){
for(int i=0;i<str.length;i++){
if(!isValid(str[i])){
System.out.println("ERROR!");
}
if(i%2==0){
output[i/2] = str[i];
}
}
}
public static boolean isValid(char c){
Character character = c;
return (character.isAlphabetic(c)||character.isDigit(c));
}
二、給定一個正整數,給出消除重複數字以後最大的整數
2.1 題目描述
給定一個正整數,給出消除重複數字以後最大的整數,注意需要考慮長整數。
- 輸入示例:423234
- 輸出示例:432
2.2 程式碼實現
//第二題
public static void solve2(String s){
char[] a = new char[10];
StringBuilder sbBuilder = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
int index = s.charAt(i)-'0';
if(a[index]==0){
a[index] = 1;
sbBuilder.append(s.charAt(i));
}else if(a[index]==1){//如果這個數字已經存在,則取其中大的數儲存
StringBuilder string = new StringBuilder(sbBuilder.toString());
long m = Long.parseLong(string.toString());
int temp = string.indexOf(index+"");
string = string.deleteCharAt(temp);
string.append(s.charAt(i));
long n = Long.parseLong(string.toString());
//System.out.println("m:"+m+",n:"+n);
if(m<n){
sbBuilder = string;
}
}
}
System.out.print(sbBuilder.toString());
}
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String string = scanner.nextLine();
solve2(string);
}
三、實現2-62進位制任意兩種進位制之間的轉換
3.1 題目描述
將一個處於Integer型別聚會範圍內的整數從指定源進位制轉換成指定目標進位制;可指定的進位制值範圍為[2-62];每個數字的可聚會範圍為[0-9a-zA-Z];輸出字串的每一個都須為有效值,反例:”012”的百位字元為無效值,實現時無需考慮非法輸入。
- 輸入描述:源進位制 目標進位制 待轉換的整數值
- 輸入示例:8 16 12345670
- 輸出示例:29cbb8
3.2 題目分析
- 先將進位制值與字元值、字元值與進位制值之間的轉換函式寫好;
- 兩種進位制之間的轉換,一般是先將源進位制轉換成十進位制,然後再轉換成新進位制;
- 另外需要注意輸出是否為有效值。
3.3 程式碼實現
由於本人能力有限,寫出的程式碼只能通過65%,希望大家有全通過的程式碼,可以分享一下,大家共同進步。
public static int toInt(char c){//將字元值轉換成進位制值
int result = 0;
if(c>='0'&&c<='9'){
result = c-'0';
}else if(c>='a'&&c<='z'){
result = c-'a'+10;
}else if(c>='A'&&c<='Z'){
result = c-'A'+36;
}
return result;
}
public static char toChar(int i){//將進位制值轉換成字元值
int result = 0;
if(i<=9){
result = i+48;
}else if(i<=35){
result = i+87;
}else if(i<=61){
result = i+29;
}
return (char) result;
}
public static String toTen(String s,int o){//將原進位制轉換成十進位制
char[] array = s.toCharArray();
Long sum = 0l;
for (int i = 0; i < array.length; i++) {
//System.out.print(toInt(array[array.length-1-i])+" ");
sum = (long) (sum+(toInt(array[array.length-1-i]))*Math.pow(o, i));
}
String result = sum+"";
return result;
}
public static String toNew(String s,int n){//將十進位制轉換成新進位制
Long num = Long.parseLong(s);
StringBuilder sBuilder = new StringBuilder();
StringBuilder result = new StringBuilder();
while(num>0){
int temp = (int) (num%n);
sBuilder.append(toChar(temp));
num = num/n;
}
byte flag = 0;
for (int i = 0; i < sBuilder.length(); i++) {
if(flag==0&&sBuilder.charAt(sBuilder.length()-1-i)=='0'){
break;
}else{
flag=1;
result.append(sBuilder.charAt(sBuilder.length()-1-i));
}
}
return result.toString();
}
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int o = scanner.nextInt();
int n = scanner.nextInt();
String num = scanner.next();
String string = toTen(num, o);
//System.out.println(string);
string = toNew(string, n);
System.out.println(string);
}
提示:大家應該注意到題目中的Integer型別,需要考慮負整數的情況,之前就是因為沒有考慮負整數的,所以只通過65%。
相關文章
- 華為秋招筆試題筆試
- 華為2019春招筆試題筆試
- 華為0821筆試第三題筆記-回溯+剪枝筆試筆記
- 華為機試題刷題總結
- 2017 年軟體實施工程師筆試面試題及答案工程師筆試面試題
- 牛客網--華為機試題
- 華為部分線上測試題
- 2017騰訊Web前端實習生招聘筆試題總結Web前端筆試
- 【華為機試線上訓練】Day2
- 華為的Java面試題,僅供參考。Java面試題
- 面試程式碼題(華為)編輯距離面試
- 【JAVA】【華為校園招聘筆試-軟體】2020-09-09Java筆試
- HTML最新面試題(筆試面試題)HTML面試題筆試
- Python 筆試 面試題Python筆試面試題
- 2017年前端面試題整理彙總100題前端面試題
- 華為機試 (11/8)
- 前端筆試題面試題記錄前端筆試面試題
- 華為隨行WiFi 2暢享版常見問題解答WiFi
- 2017Linux核心開發報告發布,華為上榜!Linux
- 2017筆記——Spotlight筆記
- (轉)2017年前端面試題整理彙總100題前端面試題
- 面試題2面試題
- 測試筆試多選題筆試
- 【華為OD】機試真題 - 分割均衡字串-2024年D卷字串
- 限時看!阿里、華為資料結構面試必考題!阿里資料結構面試
- 前端筆試題面試題記錄(下)前端筆試面試題
- Linux-筆試題Linux筆試
- c++筆試題C++筆試
- php筆試題gtalentPHP筆試
- IT公司筆試題(四)筆試
- 面試題隨筆面試題
- 華為面試題:購物車問題(01揹包演算法升級)面試題演算法
- 影像處理筆試面試題筆試面試題
- 20201014:演算法題+筆試題演算法筆試
- 測試標題2
- 華為雲問題彙總
- 3 .NET Core筆試題筆試
- JavaScript經典筆試題JavaScript筆試
- 騰訊筆試題集筆試