拉勾網真題:100 位學生報數,給定三個個位特殊數(如 3,5,7)。規則:
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) | 預期輸出 | 規則命中 |
|---|---|---|---|
| 3 | Fizz | 倍數+包含 | |
| 13 | Fizz | 包含 3(優先) | |
| 5 | Buzz | 倍數 | |
| 15 | FizzBuzz | 3和5的倍數 | |
| 35 | Fizz | 包含 3 → 忽略 5,7 倍數 | |
| 105 | FizzBuzzWhizz | 3,5,7 公倍數 | |
| 11 | 11 | 無匹配 |
String.contains()、StringBuilder 拼接。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;
}