From dee9f245cd463669dbf707e05a2872d4466cbf9b Mon Sep 17 00:00:00 2001
From: peng <peng.com>
Date: 星期四, 14 八月 2025 09:44:14 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev

---
 framework/src/main/java/cn/lili/modules/Demo_1.java |  121 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 121 insertions(+), 0 deletions(-)

diff --git a/framework/src/main/java/cn/lili/modules/Demo_1.java b/framework/src/main/java/cn/lili/modules/Demo_1.java
new file mode 100644
index 0000000..36f55fb
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/Demo_1.java
@@ -0,0 +1,121 @@
+package cn.lili.modules;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.*;
+
+public class Demo_1 {
+
+    // 濂栧搧绫�
+  static   class Prize {
+        private String name;        // 濂栧搧鍚嶇О
+        private double probability; // 涓姒傜巼(0-1涔嬮棿)
+
+        public Prize(String name, double probability) {
+            this.name = name;
+            this.probability = probability;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public double getProbability() {
+            return probability;
+        }
+    }
+
+    // 鎶藉绯荤粺绫�
+    public static class LotterySystem {
+        private List<Prize> prizes;
+        private List<Double> probabilityIntervals;
+        private Random random;
+
+        public  LotterySystem(List<Prize> prizes) {
+            // 楠岃瘉姒傜巼鎬诲拰鏄惁涓�1
+            double totalProbability = 0;
+            for (Prize prize : prizes) {
+                totalProbability += prize.getProbability();
+            }
+
+            // 濡傛灉鎬诲拰涓嶆槸1锛岃繘琛屽綊涓�鍖栧鐞�
+            if (Math.abs(totalProbability - 1.0) > 0.0001) {
+                List<Prize> normalizedPrizes = new ArrayList<>();
+                for (Prize prize : prizes) {
+                    normalizedPrizes.add(new Prize(
+                            prize.getName(),
+                            prize.getProbability() / totalProbability
+                    ));
+                }
+                this.prizes = normalizedPrizes;
+            } else {
+                this.prizes = prizes;
+            }
+
+            // 鍒濆鍖栨鐜囧尯闂�
+            initProbabilityIntervals();
+            this.random = new Random();
+        }
+
+        // 鍒濆鍖栨鐜囧尯闂�
+        private void initProbabilityIntervals() {
+            probabilityIntervals = new ArrayList<>();
+            double current = 0;
+
+            for (Prize prize : prizes) {
+                current += prize.getProbability();
+                probabilityIntervals.add(current);
+            }
+        }
+
+        // 鎵ц鎶藉
+        public String draw() {
+            // 鐢熸垚0-1涔嬮棿鐨勯殢鏈烘暟
+            double randomValue = random.nextDouble();
+
+            // 鏌ユ壘闅忔満鏁拌惤鍦ㄥ摢涓尯闂�
+            for (int i = 0; i < probabilityIntervals.size(); i++) {
+                if (randomValue < probabilityIntervals.get(i)) {
+                    return prizes.get(i).getName();
+                }
+            }
+
+            // 鐞嗚涓婁笉浼氳蛋鍒拌繖閲�
+            return "鏈腑濂�";
+        }
+
+        // 娴嬭瘯鎶藉绯荤粺
+        public static void main(String[] args) {
+            // 鍒涘缓5涓鍝侊紝璁剧疆涓嶅悓鐨勪腑濂栨鐜�
+            List<Prize> prizes = new ArrayList<>();
+            prizes.add(new Prize("涓�绛夊", 0.01));   // 1%姒傜巼
+            prizes.add(new Prize("浜岀瓑濂�", 0.05));   // 5%姒傜巼
+            prizes.add(new Prize("涓夌瓑濂�", 0.1));    // 10%姒傜巼
+            prizes.add(new Prize("鍥涚瓑濂�", 0.2));    // 20%姒傜巼
+            prizes.add(new Prize("浜旂瓑濂�", 0.64));   // 64%姒傜巼
+
+            // 鍒涘缓鎶藉绯荤粺
+            LotterySystem lottery = new LotterySystem(prizes);
+
+            // 娴嬭瘯10000娆℃娊濂栵紝鏌ョ湅姒傜巼鍒嗗竷
+            Map<String, Integer> result = new HashMap<>();
+            int totalDraws = 100000;
+
+            for (int i = 0; i < totalDraws; i++) {
+                String prizeName = lottery.draw();
+                result.put(prizeName, result.getOrDefault(prizeName, 0) + 1);
+            }
+
+            // 杈撳嚭缁撴灉
+            System.out.println("鎶藉" + totalDraws + "娆$殑缁撴灉锛�");
+            for (Map.Entry<String, Integer> entry : result.entrySet()) {
+                double percentage = (entry.getValue() * 100.0) / totalDraws;
+                System.out.printf("%s: %d娆� (%.2f%%)\n",
+                        entry.getKey(), entry.getValue(), percentage);
+            }
+        }
+    }
+
+}

--
Gitblit v1.8.0