華爲2020校招筆試題答案

8.21 筆試題答案

題目鏈接:https://pan.baidu.com/s/1HHFlCsQR8yFB4CRWPW9zIQ 

第一題

有個問題:題目要求讀入的長度是16進制的,懶得改了,所以大家自己改過來就行

import java.util.*;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        ArrayList<String> list=new ArrayList<String>();
        int n=sc.nextInt();
        for(int i=0;i<n-1;i++){
            String str=sc.next();
            if(str.equals("A")){
                list.add("12");
                list.add("34");
            }else if(str.equals("B")){
                list.add("AB");
                list.add("CD");
            }else{
                list.add(str);
            }
        }
        int len=list.size();
        list.add(0,String.valueOf(len+1));
        for(int i=0;i<list.size();i++){
            if(i==0){
                System.out.print(list.get(i));
            }else{
                System.out.print(" "+list.get(i));
            }
        }
 
    }
 
}

第2題 

 
import java.util.Scanner;
 
public class Main{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int low= scanner.nextInt();
        int high=scanner.nextInt();
        int sum1=0;//存儲個位數之和
        int sum2=0;//存儲十位數之和
        for(int i=low;i<high;i++){
            if(isPrime(i)){
                int gewei=i%10;
                int shiwei=(i/10)%10;
                sum1=sum1+gewei;
                sum2=sum2+shiwei;
            }
        }
        System.out.println((int)Math.min(sum1,sum2));
    }
    //判斷是否爲質數
    private static boolean isPrime(int src) {
        double sqrt = Math.sqrt(src);
        if (src < 2) {
            return false;
        }
        if (src == 2 || src == 3) {
            return true;
        }
        if (src % 2 == 0) {// 先判斷是否爲偶數,若偶數就直接結束程序
            return false;
        }
        for (int i = 3; i <= sqrt; i+=2) {
            if (src % i == 0) {
                return false;
            }
        }
        return true;
    }
}

 第三題

 
import leetcode.list.LinkList;
 
import java.util.*;
 
public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        String first= scanner.next();
        HashSet<String> set=new HashSet<String>();
        LinkedList<String> queue=new LinkedList<String>();
        set.add(first);
        queue.add(first);
        int m= scanner.nextInt();
        ArrayList<List<String>> list=new ArrayList<List<String>>();
        for (int i = 0; i <m ; i++) {
            String[] array=scanner.next().split(",");
            ArrayList<String> temp=new ArrayList<String>();
            for(int j=0;j<array.length;j++){
                temp.add(array[j]);
            }
            list.add(temp);
        }
        while (queue.size()!=0){
            String temp=queue.poll();
            for(int i=0;i<list.size();i++){
                ArrayList<String> temp1=(ArrayList<String>) list.get(i);
                if(temp1.contains(temp)){
                    for(int j=0;j<temp1.size();j++){
                        String temp2=temp1.get(j);
                        if(!set.contains(temp2)){
                            set.add(temp2);
                            queue.add(temp2);
                        }
                    }
                    list.remove(i);
                }
             }
        }
        System.out.println(set.size());
 
    }
}

8.28 筆試題第三題

昨天筆試時傻逼了,雖然是求解最長公共子序列問題,但題目的意思是刪除後剩下的是公共子序列,問的是刪除元素的個數。 

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            int n=sc.nextInt();
            int[] num1=new int[n];
            int[] num2=new int[n];
            for (int i=0;i<n;i++){
                num1[i]=sc.nextInt();
            }
            for (int i=0;i<n;i++){
                num2[i]=sc.nextInt();
            }

            int result=findLongest(num1,num2,n);
            System.out.println(n-result);
        }

    }
    public static int findLongest(int[] num1,int[] num2,int n){
        int[][] dp=new int[n+1][n+1];
        for (int i = 0; i <=n ; i++) {
            for (int j = 0; j <=n ; j++) {
                dp[i][j]=0;
            }
        }
        for (int i = 1; i <=n ; i++) {
            for (int j = 1; j <=n ; j++) {
                if(num1[i-1]==num2[j-1]){
                    dp[i][j]=dp[i-1][j-1]+1;
                }else{
                    dp[i][j]=dp[i-1][j]>dp[i][j-1]?dp[i-1][j]:dp[i][j-1];//比較左邊跟上邊
                }
            }
        }
        return dp[n][n];
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章