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

Java 基礎練習:隨機選號與卡普雷卡常數驗證

     編輯:Java 綜合教學

Java 基礎練習:隨機選號與卡普雷卡常數驗證

兩個經典 Java 基礎練習:模擬雙色球隨機選號、驗證四位數卡普雷卡常數 (6174) 收斂過程。

練習一:生成 6 個不重複隨機號碼 (1-36)

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; // 收斂終止
        }
    }
}

關鍵點:

  • 數字分解用取模/除法
  • 排序後組合最大/最小數
  • 歷史記錄陣列檢測收斂
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved