في الآونة الأخيرة ، أصبح إرسال مظاريف حمراء وتحية خلال العام الصيني الجديد اتجاهًا جديدًا. كمبرمج ، فهو أكثر فضولًا حول الخوارزميات أكثر من الأظرف الحمراء. هنا نقدم استراتيجية تخصيص المغلف الأحمر العشوائي الذي فكر فيه. من فضلك أعطني بعض النصائح.
مقدمة الخوارزمية
1. حد مبلغ المغلف الأحمر
بالنسبة للأظرف الحمراء في WeChat ، نعلم أنه لا يوجد أحد المظروف الأحمر الدنيا العشوائي هو نقطة واحدة وأن الحد الأقصى للمبلغ هو 200 يوان. هنا نضع أيضًا نطاق الأظرف الحمراء. الرمز التالي هو وحدة المال.
. // الحد الأقصى للحصص Red Envelope Final Static Final int maxmoney = 200 * 100 ؛
2. تحديد ما إذا كان مبلغ الظرف الأحمر قانوني
لاحظ أن هذه الخطوة مصحوبة بالخوارزمية بأكملها. لا نحتاج فقط إلى الحكم على ما إذا كان المبلغ قانونيًا قبل تخصيص المظروف الأحمر ، ولكن أيضًا بحاجة إلى الحكم على ما إذا كان المبلغ المتبقي قانونيًا بعد أن يحدد كل شخص المبلغ العشوائي مبدئيًا.
isright boolean private (int money ، int count) {double avg = money / count ؛ if (avg <minmoney) {return false ؛ } if (avg> maxmoney) {return false ؛ } إعادة صواب ؛ } 3. قم بتوليد مغلف أحمر عشوائيًا
هنا نستخدم طريقة عشوائية لإنشاء مظروف أحمر بين Minmoney و MaxMoney. بعد توليد الظرف الأحمر ، نحتاج إلى تحديد ما إذا كانت الأموال المتبقية بمثابة مظروف أحمر قانوني. إذا لم يكن مظروفًا أحمر قانونيًا ، فسنقوم بإعادة تجميع خطة التوزيع. عند إعادة توليد خطة التوزيع ، نحتاج إلى تحديد ما إذا كان الظرف الأحمر الذي تم إنشاؤه كبيرًا جدًا أو صغيرًا جدًا. إذا كان الظرف الأحمر كبيرًا جدًا ، فسوف نصل إلى قيمة صغيرة بشكل عشوائي إلى مظروف أحمر من هذا المظروف الأحمر. إذا كانت مبلغ المغلف الأحمر صغيرًا جدًا ، فسنقوم بإنشاء مظروف أحمر مع مظروف أحمر إلى قيمة كبيرة.
private int random (int money ، int mins ، int maxs ، int count) {// عدد الأظرف الحمراء هو 1 ، ويتم إرجاع المبلغ مباشرة إذا (count == 1) {return money ؛ } // إذا كان الحد الأقصى للمبلغ والحد الأدنى متساوٍ ، يتم إرجاع المبلغ مباشرة إذا (mins == maxs) {return mins ؛ } int max = maxs> المال؟ المال: ماكس. . int money1 = money - واحد ؛ // الحكم على ما إذا كانت خطة التخصيص هذه صحيحة إذا (isright (money1 ، count -1)) {return one ؛ } آخر {double avg = money1 / (count - 1) ؛ if (avg <minmoney) {// call بشكل متكرر ، قم بتعديل الحد الأقصى لمبلغ العائد الأحمر العشوائي (المال ، الدقيقة ، واحد ، العد) ؛ } آخر إذا (avg> maxmoney) {// استدعاء بشكل متكرر ، قم بتعديل الحد الأدنى من المبلغ العائد المغلف الأحمر عشوائي (المال ، واحد ، أقصى ، العد) ؛ }} إرجاع واحد ؛ } 4. إدراك تخصيص المغلف الأحمر
هنا ، من أجل تجنب مظروف أحمر معين يحتل كمية كبيرة من الأموال ، نحتاج إلى تحديد الحد الأقصى لمقدار الظرف الأحمر غير النهائي ، وقمنا بتعيينه على متوسط مبلغ المغلف الأحمر المتوسط ؛ مع طريقة واحدة أو اثنين وثلاثة ، يمكننا أن ندرك تخصيص الأظرف الحمراء.
. القائمة العامة <integer> splitredpackets (int money ، int count) {if (! isright (money ، count)) {return null ؛ } list <integer> list = new ArrayList <integer> () ؛ . ماكس = ماكس> maxmoney؟ Maxmoney: Max ؛ لـ (int i = 0 ؛ i <count ؛ i ++) {int one = random (money ، minmoney ، max ، count - i) ؛ list.add (واحد) ؛ المال -= واحد ؛ } قائمة الإرجاع ؛ }تقييم خطة تخصيص المغلف الأحمر
ما سبق يقدم الخوارزمية الأساسية للأظرف الحمراء. دعنا نتحقق من الخوارزمية في وقت واحد. لنفترض أن هناك مظروفًا أحمر من 200 يوان و 100 نسخة. دعونا نلقي نظرة على خطة التخصيص النهائية.
رمز كامل
/ ** *@الوصف: */ package com.lulei.weixin.util ؛ استيراد java.util.arraylist ؛ استيراد java.util.list ؛ استيراد com.lulei.util.jsonutil ؛ الفئة العامة RedPacketutil {// الحد الأدنى من الحصص Red Envelope Final Static Final int minmoney = 1 ؛ // الحد الأقصى للحصص Red Envelope Final Static Final int maxmoney = 200 * 100 ؛ // الحد الأقصى لعدد كل مظروف أحمر هو مضاعف متوسط الأوقات النهائية الثابتة المتوسطة = 2.1 ؛ / ** * param money * param count * regurn * author: lulei * description: split red envelope */ public list <integer> splitredpackets (int money ، int count) {if (! isright (mone ، count)) {return null ؛ } list <integer> list = new ArrayList <integer> () ؛ . ماكس = ماكس> maxmoney؟ Maxmoney: Max ؛ لـ (int i = 0 ؛ i <count ؛ i ++) {int one = random (money ، minmoney ، max ، count - i) ؛ list.add (واحد) ؛ المال -= واحد ؛ } قائمة الإرجاع ؛ } /** * param money * param mins * param maxs * param count * regurn * author: lulei * description: random Red Envelope limit * /private int random (int mones ، int maxs ، int count) {// the reveldes reveeds 1 ، والمبلغ يتم إرجاعه بشكل مباشر إذا (count == 1) } // إذا كان الحد الأقصى للمبلغ والحد الأدنى للمبلغ متساويًا ، فسيتم إرجاع المبلغ مباشرة إذا (mins == maxs) {return mins ؛ } int max = maxs> المال؟ المال: ماكس. . int money1 = money - واحد ؛ // الحكم على ما إذا كانت خطة التخصيص هذه صحيحة إذا (isright (money1 ، count -1)) {return one ؛ } آخر {double avg = money1 / (count - 1) ؛ if (avg <minmoney) {// call بشكل متكرر ، قم بتعديل الحد الأقصى لمبلغ العائد الأحمر العشوائي (المال ، الدقيقة ، واحد ، العد) ؛ } آخر إذا (avg> maxmoney) {// مكالمة متكررة ، قم بتعديل الحد الأدنى من المبلغ العائد على المغلف الأحمر عشوائي (المال ، واحد ، أقصى ، العد) ؛ }} إرجاع واحد ؛ } / ** * param money * param count * regurn * author: lulei * description: هل هذا النوع من المغلف الأحمر قانوني؟ if (avg <minmoney) {return false ؛ } if (avg> maxmoney) {return false ؛ } إعادة صواب ؛ } main static void main (string [] args) {// todo method method tuto clup redpacketutil util = new redpacketutil () ؛ System.out.println (jsonutil.parsejson (util.spletredpackets (20000 ، 100))) ؛ }}لمزيد من المحتوى المثير ، يرجى النقر فوق "ملخص برنامج تعليمي Development Android WeChat" و "ملخص تعليمي Java WeChat Development".
ما سبق هو كل شيء عن هذا المقال ، آمل أن يكون من المفيد للجميع تعلم برمجة Java.