兩個經典 Java 基礎練習:模擬雙色球隨機選號、驗證四位數卡普雷卡常數 (6174) 收斂過程。
import java.util.*;
public class LotteryNumberGenerator {
public static void main(String[] args) {
Random random = new Random();
int[] numbers = new int[6];
for (int i = 0; i < 6; i++) {
numbers[i] = random.nextInt(36) + 1; // 1-36
// 去重檢查
for (int j = 0; j < i; j++) {
if (numbers[j] == numbers[i]) {
i--; // 重新生成當前位置
break;
}
}
}
Arrays.sort(numbers);
System.out.print("中獎號碼:");
for (int num : numbers) {
System.out.print(num + " ");
}
}
}
輸出示例:中獎號碼:7 15 23 28 31 33
規則:任意四位數(排除四位相同),將數字重組成最大數與最小數,求差,重複直到結果不變(必收斂至 6174)。
import java.util.*;
public class KaprekarConstant {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("請輸入一個不全相同的四位數:");
int n = sc.nextInt();
int[] history = new int[100];
history[0] = n;
int step = 0;
while (true) {
// 分解四位數字
int[] digits = {
n / 1000, (n / 100) % 10, (n / 10) % 10, n % 10
};
// 冒泡排序升序
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 3 - i; j++) {
if (digits[j] > digits[j + 1]) {
int t = digits[j];
digits[j] = digits[j + 1];
digits[j + 1] = t;
}
}
}
int max = digits[3] * 1000 + digits[2] * 100 + digits[1] * 10 + digits[0];
int min = digits[0] * 1000 + digits[1] * 100 + digits[2] * 10 + digits[3];
n = max - min;
history[++step] = n;
System.out.println("第" + step + "次運算結果:" + n);
if (n == history[step - 1]) break; // 收斂終止
}
}
}
關鍵點: