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