首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

拉勾網 Java 面試真題:FizzBuzzWhizz 進階變體邏輯實作

     編輯:Java 相關知識

從經典 FizzBuzz 到多規則優先級:體育老師的報數遊戲

拉勾網真題:100 位學生報數,給定三個個位特殊數(如 3,5,7)。規則:

  1. 倍數規則:3 的倍數→Fizz,5→Buzz,7→Whizz;多重倍數拼接(如 15→FizzBuzz)。
  2. 包含規則優先:報數包含第一個特殊數(如 3)時,直接輸出對應單詞(Fizz),**忽略所有倍數規則**。(如 35 包含 3 → 僅輸出 Fizz,不輸出 BuzzWhizz)。

核心邏輯實作

public class Baoshu {
    public static String baoshu(int n1, int n2, int n3, int num) {
        String s = String.valueOf(num);
        // 1. 最高優先級:包含第一個特殊數
        if (s.contains(String.valueOf(n1))) return "Fizz";
        
        // 2. 倍數規則組合
        StringBuilder sb = new StringBuilder();
        if (num % n1 == 0) sb.append("Fizz");
        if (num % n2 == 0) sb.append("Buzz");
        if (num % n3 == 0) sb.append("Whizz");
        
        return sb.length() > 0 ? sb.toString() : s;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n1=0, n2=0, n3=0;
        // 輸入驗證:三個不同個位正整數
        while (n1<=0||n1>=10||n2<=0||n2>=10||n3<=0||n3>=10||n1==n2||n2==n3||n1==n3) {
            System.out.println("請輸入三個不同的個位正整數:");
            n1=sc.nextInt(); n2=sc.nextInt(); n3=sc.nextInt();
        }
        for (int i=1; i<=100; i++) System.out.println(baoshu(n1,n2,n3,i));
    }
}

測試用例驗證

輸入數特殊數 (3,5,7)預期輸出規則命中
3Fizz倍數+包含
13Fizz包含 3(優先)
5Buzz倍數
15FizzBuzz3和5的倍數
35Fizz包含 3 → 忽略 5,7 倍數
105FizzBuzzWhizz3,5,7 公倍數
1111無匹配

面試考察點總結

  • 條件優先級理解:包含規則 > 倍數規則,且僅針對第一個特殊數。
  • 字符串處理:String.contains()、StringBuilder 拼接。
  • 邊界輸入驗證:個位、正整數、互不相同。
  • 可擴展性:若特殊數變為 N 個、單詞可配置,如何重構?策略模式 + 責任鏈。
  • 效能:100 次循環無壓力;若擴展到百萬,預計算特殊數字符串、位運算優化取模。

擴展重構:策略模式版

interface Rule { String apply(int num, Context ctx); }
class ContainsFirstRule implements Rule { ... }
class MultipleRule implements Rule { ... }
class DefaultRule implements Rule { ... }

// 責任鏈執行
List<Rule> chain = List.of(new ContainsFirstRule(), new MultipleRule(), new DefaultRule());
for (Rule r : chain) {
    String res = r.apply(num, ctx);
    if (res != null) return res;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved