1. 程式人生 > >2018.8.22華為優招筆試題(軟體開發)

2018.8.22華為優招筆試題(軟體開發)

題目一:

挑選便宜的廠商:

廠商1:大於等於3件打7折,實付大於等於50元免運費10元

廠商2:滿10元減2元,實付大於等於99免運費6元

根據輸入件數、原價,計算選擇哪個廠商便宜(四捨五入精確到分)。輸出 1、2、0;

輸入描述:

輸入一行,第一列是商品件數,取值大於0、小於1萬;第二列是原價,大於0、小於1萬,單位元,精確到分

輸出描述:

一個數代表選擇哪個廠商

1代表廠商1,2代表廠商2,0代表相等

示例

輸入 4  2.30 ; 輸出 2

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        double num = sc.nextDouble();//數量
        double price = sc.nextDouble();//價格
        double sum1 = num * price;
        double sum2 = num * price;
        if (num >= 3) {sum1 = sum1 * 0.7;}
        int n = (int)(sum2 / 10);//滿足滿10減2的件數
        if (sum2 >= 10) {sum2 = sum2 - 2 * (double)n;}
        if (sum1 < 50) {sum1 += 10;}
        if (sum2 < 99) {sum2 += 6;}
        if (sum2 == sum1) {System.out.println(0);
        }else if(sum1 > sum2){System.out.println(2);
        }else{System.out.println(1);}
    }
}

題目二:

給定一個字串str,返回其最長有效括號子串的長度

輸入描述:

1、有效的括號字串是指只包含小括號,不包含其他字元,且滿足括號語法規則的字串。例如“(())”是有效的,"((a))"、"(()”、“{()}”是無效的。

2、有效括號子串是指輸入字串中滿足有括號字串規則的子串。例如“()(()()(”的有效括號子串包含“()”和“()()”,其中最長的有效括號子串長度即為4。

輸出描述:

返回其最長有效括號子串的長度

示例

輸入 ()(()()(;輸出 4

import java.util.Stack;
import java.util.Scanner;
public class Main {
    public static int getMaxLengthOfValidBrackets(String str){
        Stack<Integer> stack = new Stack<Integer>();
        int len = 0;
        char chars[] = str.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] == ')' && !stack.empty() && chars[stack.peek()] == '(') {
                stack.pop();
                if (stack.empty()) {
                    len = i + 1;
                }else{
                    if (i - stack.peek() > len) {
                        len = i - stack.peek();
                    }
                }
            }else{
                stack.push(i);
            }
        }
        return len;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        System.out.println(getMaxLengthOfValidBrackets(str));
    }
}

題目三:

DNA序列由四種核苷酸組成,主要是腺嘌呤(A),胞嘧啶(C),鳥嘌呤(G),胸腺嘧啶(T)。每個字母代表一種鹼基,兩個鹼基形成一個鹼基對,鹼基對的配對規律是固定的,既是:A-T,C-G。典型的他們無間隔的排列在一起,例如序列AAAGTCTGAC。任意長度大於4的遺傳核苷酸被稱為一個序列,提取重複DNA序列是一種基礎的DNA序列特徵提取方法,請給出DNA序列的最長重複片段,以及重複片段的長度。

注:1)輸出格式為“序列”+“空格”+“序列長度”,如果沒有找到重複序列,則輸出“空格”+0

2)如果出現多個相同長度的重複序列,則輸出第一次出現的在序列中的重複序列及其長度

3)輸入可以是全小寫的,也可以是全大寫的,區分大小寫;

輸入描述:

一個長度不超過100的DNA序列

輸出描述:

最長的重複DNA序列片段,重複片段的長度

示例

輸入 AGCTAGCT ;輸出 4

import java.util.Scanner;
public class Main {
    public static String getMaxLengthOfSubRepeatString(String str){
        String maxStr = "";
        for (int i = 0; i < str.length(); i++) {
            for (int j = 0; j < i; j++) {
                String temp = "";
                int k = j;int m = i;
                while (i < str.length() && k < str.length() && m < str.length() && 
                str.charAt(m)==str.charAt(k)){
                    m++;k++;
                }
                temp = str.substring(j,k);
                if (temp.length() > maxStr.length()) {
                    maxStr = temp;
                }
            }
        }
        return maxStr;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        String result = getMaxLengthOfSubRepeatString(str);
        System.out.println(result+" "+str.length());
    }
}