تشارككم الأمثلة في هذه المقالة معك خوارزمية Java Lottery للرجوع إليها. المحتوى المحدد كما يلي
1. تحليل الخوارزمية
تنقسم الجوائز إلى فترات حسب الاحتمال. يمثل كل فاصل جائزة ، ثم يتم رسم رقم عشوائي ويتم فحص الفاصل الزمني العكسي ، وهو الجائزة المرسومة.
2. الكود
الخوارزمية الأساسية
الفئة العامة الحساب {// التكبير الخاص الثابتة الثابتة int mulriple = 1000000 ؛ Public int Pay (قائمة <ugne> pricings) {int lastScope = 0 ؛ // Shuffle ، قم بتعطيل مجموعة أوامر الجائزة. shuffle (جوائز) ؛ خريطة <integer ، int [] >> الأسعار = new hashmap <integer ، int []> () ؛ الخريطة <integer ، integer> التسعير = new hashmap <integer ، integer> () ؛ لـ (سعر الجائزة: الجوائز) {int priceid = price.getPrizeId () ؛ // partition الفاصل الزمني int currentscope = lastScope + price.getProbability (). اضرب (جديد BigDecimal (mulriple)). Intvalue () ؛ الأسعار. pricequantity.put (prizeid ، price.getQuantity ()) ؛ LastScope = currentscope ؛ } // احصل على رقم عشوائي بين 1-1000000 int luckynumber = جديد عشوائي (). nextInt (mulriple) ؛ int luckyprizeid = 0 ؛ // ابحث عن الفاصل الزمني حيث يوجد الرقم العشوائي إذا ((NULL! = الأسعار) لـ (map.entry <integer ، int []> m: intersets) {int key = m.getKey () ؛ if (luckynumber> = m.getValue () [0] && luckynumber <= m.getValue () [1] && pricequantity.get (key)> 0) {LuckyPrizeId = Key ؛ استراحة؛ }}} if (LuckyPrizeId> 0) {// قلل من جرد الجائزة بواسطة واحد} return LuckyPrizeId ؛ }} جائزة الفول
جائزة الفئة العامة { / *** تسمية فريدة لجائزة* / private integer prizeid ؛ / *** احتمال الفوز*/ احتمالية BigDecimal الخاصة ؛ / *** عدد الجوائز*/ كمية عدد صحيح خاص ؛ عدد صحيح عام getPrizeId () {return prizeid ؛ } public void setPrizEid (integer prizeid) {this.prizeId = prizeId ؛ } getProbability bigDecimal Public () {احتمال الإرجاع ؛ } public void setprobability (احتمال كبير) {this.probability = الاحتمال ؛ } integer getQuantity () {return Quantity ؛ } public void setquantity (integer Quantity) {this.quantity = Quantity ؛ }} 3. اختبار
جائزة 1 احتمال: 5 ٪
جائزة 2 احتمال: 10 ٪
جائزة 3 احتمال: 15 ٪
جائزة 4 احتمال: 20 ٪
جائزة 5 احتمال: 50 ٪
اختبار الفئة العامة {public static void main (string [] args) {list <brize> pricings = new ArrayList <brize> () ؛ جائزة السعر 1 = جائزة جديدة () ؛ Price1.SetPrizeId (1) ؛ Price1.SetProbability (New BigDecimal (0.05)) ؛ Price1.SetQuantity (1) ؛ الأسعار. جائزة Price2 = جائزة جديدة () ؛ Price2.SetPrizeId (2) ؛ Price2.SetProbability (BigDecimal جديد (0.10)) ؛ Price2.SetQuantity (10) ؛ الأسعار. ADD (جائزة 2) ؛ جائزة السعر 3 = جائزة جديدة () ؛ Price3.SetPrizeId (3) ؛ Price3.SetProbability (New BigDecimal (0.15)) ؛ Price3.SetQuantity (20) ؛ الأسعار. ADD (جائزة 3) ؛ جائزة السعر 4 = جائزة جديدة () ؛ Price4.SetPrizeId (4) ؛ Price4.SetProbability (New BigDecimal (0.20)) ؛ Price4.SetQuantity (50) ؛ الأسعار. جائزة السعر 5 = جائزة جديدة () ؛ Price5.SetPrizeId (5) ؛ Price5.SetProbability (New BigDecimal (0.50)) ؛ Price5.SetQuantity (200) ؛ الأسعار. ADD (الجائزة 5) ؛ int price1getTimes = 0 ؛ int price2getTimes = 0 ؛ int price3getTimes = 0 ؛ int price4getTimes = 0 ؛ int price5getTimes = 0 ؛ int price5getTimes = 0 ؛ الحساب الحسابي = حساب جديد () ؛ الأوقات الداخلية = 1000 ؛ لـ (int i = 0 ؛ i <times ؛ i ++) {int priceid = arithmetic.pay (جوائز) ؛ Switch (prizeId) {case 1: price1getTimes ++ ؛ استراحة؛ الحالة 2: Price2GetTimes ++ ؛ استراحة؛ الحالة 3: Price3GetTimes ++ ؛ استراحة؛ الحالة 4: Price4GetTimes ++ ؛ استراحة؛ الحالة 5: Price5GetTimes ++ ؛ استراحة؛ }} system.out.println ("عدد اليانصيب" + مرات) ؛ System.out.println ("Bize1 WINS" + prize1getTimes) ؛ system.out.println ("prize2 wins" + prize2getTimes) ؛ System.out.println ("prize3 wins" + prize3getTimes) ؛ system.out.println ("prize4 wins" + prize4getTimes) ؛ system.out.println ("prize5 wins" + prize5getTimes) ؛ }} نتيجة:
من خلال 1000 استخراج ، يمكننا أن نرى أن دقة الخوارزمية لا تزال مرتفعة للغاية.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.