昨天作的華爲筆試題,三道編程題,嗯,總共600分,難度應該是依次上升吧,java
一般分值分佈是100分、200分、300分。兩道AC了,一道75%,應該能進面試了吧。面試
趁着熱乎來mark一下。編程
1.題意大概描述:輸入一個整數,輸出整數的位數,倒序輸出它的每一位數字(數字數組
之間空格分開)和倒序的連續數值,並且題目限定了輸入的整數不超過五位數。spa
題目所給例子:code
輸入:-12345blog
輸出:-5 4 3 2 1排序
-54321ip
1 import java.util.Scanner; 2 public class Main{ 3 public static void main(String[] args) throws Exception 4 { 5 Scanner sc = new Scanner(System.in); 6 while(sc.hasNext()) 7 { 8 String str = sc.nextLine(); 9 int flag = 0; //是不是負數標誌位 10 if(str.contains("-")) 11 { 12 flag = 1; 13 str = str.substring(1); 14 } 15 int len = str.length(); 16 System.out.println(len); 17 if(flag == 1) 18 System.out.print("-"); 19 for(int i = len-1; i >= 0;i--) 20 { 21 if(i != 0) 22 System.out.print(str.charAt(i)+" "); 23 else 24 System.out.println(str.charAt(i)); 25 } 26 if(flag == 1) 27 System.out.print("-"); 28 System.out.println(new StringBuffer(str).reverse().toString()); 29 } 30 } 31 }
2. 題意大概描述:輸入四個ip,前兩個表示第一個ip段的起始地址和終止地址,後兩個表示input
第二個ip段的起始地址和終止地址(題目這麼描述的時候,我有理由懷疑輸入順序有可能和
是起始ip地址和終止ip地址是不按順序輸入的),而後判斷兩個ip段是否有交集。如有則輸出
Overlap IP,若沒有則輸出No Overlap IP。
題目所給例子:
輸入:1.1.1.1
255.255.255.255
2.2.2.2
3.3.3.3
輸出:Overlap IP
這個題我是有點蒙,當時就直接跳轉第三題了,怕時間不夠,作完第三題再來作的第二題。
可是後來這個題仍是沒能AC,嗯,就是這道題經過率只有75%,對ip這個分段仍是不熟悉,
有時間得把這個坑給填了。昨天寫的代碼以下(改天填坑):
1 import java.util.Scanner; 2 public class Main{ 3 public static void main(String[] args) 4 { 5 Scanner sc = new Scanner(System.in); 6 String[] ip = new String[4]; 7 while(sc.hasNext()) 8 { 9 int[] numip = new int[4]; 10 for(int i =0;i<4;i++) 11 { 12 ip[i] = sc.nextLine(); 13 String[] arr = ip[i].split("\\."); 14 int[] ar = new int[4]; 15 for(int j=0;j<4;j++) 16 { 17 ar[j]= Integer.valueOf(arr[j]); 18 } 19 numip[i] = (ar[0]<<24)+(ar[1]<<16)+(ar[2]<<8)+(ar[3]); 20 } 21 if(Math.max(numip[0],numip[1]) <Math.min(numip[3],numip[2]) 22 ||Math.min(numip[0],numip[1])>Math.max(numip[3],numip[2])){ 23 System.out.println("No Overlap IP"); 24 }else{ 25 System.out.println("Overlap IP"); 26 } 28 } 29 } 30 }
3.題意大概描述:輸入一連串整數,整數之間以空格分開,,再輸入一個整數表示
按照固定規則排序後的位置,而後輸出從新排序後對應的這個位置的整數。題目
所給排序規則爲:按照每一個整數的後三位進行比較大小,按從小到大排序,不足
三位的按原數值參與比較。假若按規則比較兩個數值相同,則順序爲輸入時的相對
位置。
題目所給例子:
輸入:1223 22 3232 2016
: 3
輸出:1223
這個題之前作過相似的,按照後幾位排序的,因此昨天先選擇作的這道。
//正解。。
public class Main { 2 public static void main(String[] args) { 3 4 Scanner sc = new Scanner(System.in); 5 while(sc.hasNext()) 6 { 7 String input = sc.nextLine(); 8 int index = Integer.parseInt(sc.nextLine()); 9 System.out.println(sort(index, input)); 10 } 11 } 12 13 public static String sort(int index, String input) { 14 15 String[] strs = input.split(" "); 16 if (index > strs.length) return null; 17 insertSort(strs); 18 return strs[index - 1]; 19 } 20 21 public static void insertSort(String[] strs) { 22 23 for (int i = 1; i < strs.length; ++i) 24 { 25 int j = 0; 26 while (j < i) { 27 if (convert(strs[j]) <= convert(strs[i])) ++j; 28 else break; 29 } 30 String tmp = strs[i]; 31 for (int k = i; k > j; --k) 32 { 33 strs[k] = strs[k - 1]; 34 } 35 strs[j] = tmp; 36 } 37 } 38 39 public static int convert(String str) 40 { 41 int num = Integer.parseInt(str); 42 if (str.length() > 3) 43 { 44 num = Integer.parseInt(str.substring(str.length() - 3)); 45 } 46 return num; 47 } 48 }
、、第一遍作的錯誤解,還沒修正過來。。。。。 public class Main { public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); while(sc.hasNext()) { String str = sc.nextLine(); int index = sc.nextInt(); String[] strs = str.split(" "); if(index<=0||index>strs.length) continue; int[] arr = convert(strs); for(int i = 0;i<strs.length;i++) { if(strs[i].contains(String.valueOf(arr[index-1]))) { System.out.println(strs[i]); break; } } } } //將後三位轉換爲整數,並排序而後返回排序好了的數組 public static int[] convert(String[] strs) { int[] numstrs = new int[strs.length]; for(int i = 0;i < strs.length;i++) { if(strs[i].length()>3) numstrs[i]=Integer.parseInt(strs[i].substring(strs[i].length()-3)); if(strs[i].length()>0&&strs[i].length()<=3) { numstrs[i]=Integer.parseInt(strs[i]); } } Arrays.sort(numstrs); // for(Integer num:numstrs) // System.out.println("---"+num); return numstrs; } }