2020.4.8華爲筆試二題(Java實現)

1. 編譯器找ID總數

小華設計了一種編譯語言最大支持N個字不同的字符,由這些字符組成的ID長度範圍是“1<length<L”,求設計的語言最多能組成多少個ID。

  • 思路:大數取模 + 組合數
import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Long mod = 1000000007l;
        while (input.hasNext()) {
            Long n = input.nextLong();
            Long l = input.nextLong();
            if (n == 0 && l == 0) {
                break;
            }
            Long sum = 0l;
            Long k = n;
            while(l>0){
                sum+=k;
                sum%=mod;
                k=k*n%mod;
                l--;
            }
            System.out.println(sum);
        }
    }
}

結果ac

2.最大的二進制字符串

已知由0和1組成的字符串長度爲n,可以進行以下兩種操作:
(1)遇到任意“00”可以改變爲“10”;
(2)遇到任意“10”可以改變爲“01”
通過一波操作求此二進制數字最大爲多少?

  • 思路:重點是判斷兩種條件,第一種直接換總是會更大,使用第二種操作的前提是“10”前面是“0”,才能保證換過之後ch[k]和ch[k+1]可以進行第一個操作,讓字符串的值變大。
import java.util.Scanner;
public class Test2{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        int t = input.nextInt();
        for(int i=0; i<t; i++) {
            int n = input.nextInt();
            String s = input.next();
            char[] ch = new char[10000];
            for (int j=0; j<n; j++) {
                ch[j] = s.charAt(j);
            }
            for (int k=0; k<n; k++) {
                if (ch[k] == '0' && ch[k + 1] == '0') ch[k] = '1';
                else if(ch[k]=='0' && ch[k+1] == '1' && ch[k+2] == '0'){
                    ch[k] = '1'; ch[k+1] = '0';ch[k+2] = '1';
                }
            }
            for (int k = 0; k < n; k++) {
                System.out.print(ch[k]);
            }
            System.out.println();
        }
    }
}

結果是case通過了70%;考完之後繼續想,覺得應該是“10”變“01”情況的邊界考慮不周。 只有在k+2 < n時,ch[k+2]纔有必要去交換

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