本系列文章將經典的《C 語言經典 100 題》使用 Java 語言重新實作,旨在幫助開發者透過熟悉的語言掌握基礎演算法邏輯。第一題經典問題:給定數字 1、2、3、4,能組成多少個互不相同且無重複數字的三位數?具體有哪些?
三位數的百位、十位、個位皆可從 {1,2,3,4} 中選取。核心在於生成所有排列並過濾掉含重複數字的組合。採用三層巢狀迴圈分別代表百位、十位、個位,利用條件判斷確保三數字兩兩不同。
public class Java01 {
public static void main(String[] args) {
int i, j, k, num = 0;
for (i = 1; i < 5; i++) { // 百位
for (j = 1; j < 5; j++) { // 十位
for (k = 1; k < 5; k++) { // 個位
if (i != j && i != k && k != j) {
System.out.print(i * 100 + j * 10 + k + " ");
if (++num % 5 == 0) {
System.out.println(); // 每 5 個換行
}
}
}
}
}
System.out.println("\n" + "無重複數字三位數個數為:" + num);
}
}
程式會列印所有符合條件的三位數(共 24 個),並每行顯示 5 個,最後輸出總數。這展示了窮舉法解決排列組合問題的基本思維,也是後續更複雜演算法的基礎。
Collections 工具類生成排列。完整程式碼已上傳至 GitHub,歡迎參考學習。