• 华为 2018 笔试题(IT应用软件开发工程师岗)


      昨天做的华为笔试题,三道编程题,嗯,总共600分,难度应该是依次上升吧,

    通常分值分布是100分、200分、300分。两道AC了,一道75%,应该能进面试了吧。

    趁着热乎来mark一下。

    1.题意大概描述:输入一个整数,输出整数的位数,倒序输出它的每一位数字(数字

    之间空格分开)和倒序的连续数值,而且题目限定了输入的整数不超过五位数。

    题目所给例子:

    输入:-12345

    输出:-5 4 3 2 1

              -54321

     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段的起始地址和终止地址,后两个表示

    第二个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;
        }
    }
  • 相关阅读:
    BestCoder Round #32
    USACO Runaround Numbers
    USACO Subset Sums
    USACO Sorting a Three-Valued Sequence
    USACO Ordered Fractions
    USACO 2.1 The Castle
    Codeforces Round #252 (Div. 2)
    Codeforces Round #292 (Div. 2)
    BZOJ 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居
    BZOJ 1603: [Usaco2008 Oct]打谷机
  • 原文地址:https://www.cnblogs.com/mrdblog/p/7519692.html
Copyright © 2020-2023  润新知