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

幸運轉盤概率算法:等角度扇區實現不同中獎率

     編輯:程式設計綜合問答

核心思想

轉盤 6 個等角度扇區 (各 60°),但**中獎概率不同**。實現:將概率映射到 **0~1 區間**,隨機數落在哪個區間即中該獎。

演算法步驟

  1. 定義獎品與權重 (權重和 = 1 或 100):
struct Prize { int id; String name; double weight; }; // weight 如 0.5, 0.2, 0.15, 0.1, 0.04, 0.01
  1. 計算累積概率區間:
double cum = 0;
for (Prize p : prizes) {
    p.min = cum;
    cum += p.weight;
    p.max = cum;
}
  1. 產生隨機數 `r = random()` (0~1),遍歷找 `r ∈ [min, max)` 的獎品。
double r = Math.random();
for (Prize p : prizes) if (r >= p.min && r < p.max) return p;

前端動畫配合

  • 轉盤旋轉角度 = `360 * (1 - r) + 360 * k` (k 為圈數),確保指針停在對應扇區中心。
  • CSS `transition: transform 3s cubic-bezier(0.17, 0.67, 0.12, 0.99)` 模擬減速。

後端驗證 (防作弊)

前端僅展示,**中獎邏輯必須在後端**執行:前端請求 `/api/lottery/draw`,後端按上述算法決定結果,返回獎品 ID 與**目標角度**,前端按角度旋轉。

參考資源

博客園詳細實現:https://www.cnblogs.com/mofish/archive/2013/01/24/2875516.html

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved