華爲 2018 筆試題(IT應用軟件開發工程師崗)

  昨天作的華爲筆試題,三道編程題,嗯,總共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;
    }
}
相關文章
相關標籤/搜索