สิ่งที่บ้าที่สุดที่ฉันเล่นในช่วงไม่กี่ปีที่ผ่านมาคือการส่งซองจดหมายสีแดงโดยเฉพาะในช่วงปีใหม่ของจีน ฉันเขียนอัลกอริทึมแบบสุ่มสำหรับซองจดหมายสีแดงด้านล่าง จริงๆแล้วมันค่อนข้างง่าย มันมีเพียงวิธีคิดเท่านั้น ฉันหวังว่ามันจะเป็นแรงบันดาลใจให้คุณ
คลาสสาธารณะ WXALGORITHM { / *** @param moneysum ป้อนจำนวนเงินทั้งหมด* @param rednum ป้อนจำนวนแพ็กเก็ตสีแดง* / โมฆะคงที่ส่วนตัว WxAlgorithm (สอง moneysum, int rednum) {// กำหนดจำนวนเงินขั้นต่ำ สุ่มสุ่ม = ใหม่สุ่ม (); // จุดทศนิยมที่แน่นอน 2 ตัวเลขตัวเลข formatter = decimalformat ใหม่ ("#. ##"); สำหรับ (int i = 1; i <rednum; i ++) {// ตัวเลขสุ่มช่วงของค่าอยู่ระหว่างค่าต่ำสุดและเงินสตริงยอดเงิน = formatter.format (random.nextdouble () * (Moneysum - moneymin)+moneymin); // การแปลงตัวเลข moneysum = double.valueof (formatter.format (moneysum - double.valueof (เงิน))); System.out.println ("th" + i + "ซองจดหมายสีแดง:" + money + "หยวน, ยอดคงเหลือ:" + moneysum); } system.out.println ("ซองจดหมายสีแดงสุดท้าย:" + moneysum + "หยวน, ยอดคงเหลือ:" + (moneysum - moneysum)); } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {wxalgorithm (10.26, 9); -ต่อมามีการรวบรวมอัลกอริทึมซองจดหมายสีแดงแบบสุ่มบางส่วนออนไลน์สำหรับการอ้างอิงของคุณ
สาธารณะคงที่สองเท่า [] getMoney (เงินสองเท่า, int num) {สุ่ม r = new random (); decimalformat format = new DecimalFormat (". ##"); double middle = double.parsedouble (format.format (money/num)); double [] dou = ใหม่ double [num]; double redmoney = 0; สองครั้ง nextMoney = เงิน; ผลรวมสองเท่า = 0; ดัชนี int = 0; สำหรับ (int i = num; i> 0; i-) {ถ้า (i == 1) {dou [index] = nextMoney; } else {ในขณะที่ (จริง) {string str = format.format (r.nextdouble ()*nextMoney); redmoney = double.parsedouble (str); if (redmoney> 0 && redmoney <middle) {break; }} nextMoney = double.parsEdouble (format.format (nextMoney - RedMoney)); sum = sum + redmoney; Dou [index] = redmoney; middle = double.parsedouble (format.format (nextMoney/(I-1))); ดัชนี ++; }} return Dou; - นี่คือแนวคิดพื้นฐาน: ก่อนคำนวณค่าเฉลี่ยของซองจดหมายสีแดงจากนั้นส่งซองจดหมายสีแดงด้วยจำนวนซองสีแดงที่มีขนาดเล็กกว่าค่าเฉลี่ยนี้ หลังจากส่งซองจดหมายสีแดงจำนวนซองจดหมายสีแดงทั้งหมดจะต้องลดลงตามลำดับ ในเวลาเดียวกันคำนวณค่าเฉลี่ยใหม่: จำนวนเงินรวมใหม่ % (หมายเลขซองจดหมายสีแดงรวมเดิม -1) จนกระทั่งซองจดหมายสีแดงล่าสุดใส่จำนวนเงินทั้งหมดที่เหลืออยู่ทั้งหมด
นอกจากนี้ยังมีการแบ่งปันซอร์สโค้ดที่น่าตื่นเต้นมากมาย: อัลกอริทึมการจัดสรรซองจดหมายสีแดงแบบสุ่มของ Java เพื่อใช้ซอร์สโค้ด
แพ็คเกจ com.sunron.test; นำเข้า java.math.bigdecimal; นำเข้า org.junit.test; ชั้นเรียนสาธารณะ Hongbao {@test โมฆะสาธารณะ testhonbao () {hb (100, 9, 0.01); // จำนวน, จำนวน, ค่าต่ำสุด // zb (); } โมฆะ Hb (รวมสองเท่า, จำนวน int, สองนาที) {สำหรับ (int i = 1; i <num; i ++) {double safe_total = (total- (num-i)*นาที)/(num-i); double money = math.random ()*(safe_total-min)+min; bigdecimal money_bd = ใหม่ bigdecimal (เงิน); money = money_bd.setscale (2, bigdecimal.round_half_up) .doublevalue (); ทั้งหมด = รวมเงิน; BigDecimal total_bd = ใหม่ bigdecimal (รวม); total = total_bd.setscale (2, bigdecimal.round_half_up) .doublevalue (); System.out.println ("th"+i+"ซองจดหมายสีแดง:"+money+", ยอดคงเหลือคือ:"+ทั้งหมด+"หยวน"); } system.out.println ("th"+num+"ซองสีแดง:"+total+", ยอดคงเหลือคือ: 0 หยวน"); } void zb () {สำหรับ (int a = 0; a <= 10,000; a ++) {ถ้า (a % 1000 == 0) system.out.println (a); -เมื่อคนอื่น ๆ คว้าซองจดหมายสีแดงเราจะศึกษาอัลกอริทึมสำหรับซองจดหมายสีแดงแบบสุ่ม:
โมฆะคงที่สาธารณะหลัก (สตริง [] args) {// จำนวนซองจดหมายสีแดงหมายเลข int = 10; // ปริมาณทั้งหมดของซองจดหมายสีแดงลอยทั้งหมด = 100; เงินลอย; // ซองจดหมายสีแดงต่ำสุดสองนาที = 1; สูงสุดสองเท่า; int i = 1; รายการคณิตศาสตร์ = new ArrayList (); DecimalFormat df = decimalformat ใหม่ ("##. ##"); ในขณะที่ (i <number) {// ตรวจสอบให้แน่ใจว่าแม้ว่าซองจดหมายสีแดงจะใหญ่ที่สุดซองจดหมายสีแดงแต่ละอันจะไม่น้อยกว่าค่าต่ำสุดของซองจดหมายสีแดงที่เหลืออยู่สูงสุด = ทั้งหมด - นาที * (หมายเลข - i); int k = (int) (หมายเลข - i) / 2; // ตรวจสอบให้แน่ใจว่าซองจดหมายสีแดงที่ได้รับจากสองคนสุดท้ายไม่เกินซองจดหมายสีแดงที่เหลืออยู่ถ้า (หมายเลข - i <= 2) {k = number - i; } // ขีด จำกัด เฉลี่ยของซองจดหมายสีแดงสูงสุดคือสูงสุด = สูงสุด /k; // ตรวจสอบให้แน่ใจว่าซองจดหมายสีแดงแต่ละอันมากกว่าค่าต่ำสุดและจะไม่มากกว่าเงินค่าสูงสุด = (int) (ขั้นต่ำ * 100 + math.random () * (สูงสุด * 100 - นาที * 100 + 1)); เงิน = (ลอย) เงิน / 100; // รักษาทศนิยมสองตำแหน่งเงิน = float.parsefloat (df.format (เงิน)); รวม = (int) (รวม*100 - เงิน*100); ทั้งหมด = ทั้งหมด/100; Math.Add (เงิน); System.out.println ("เธรด" + i + "บุคคลได้รับ" + money + "ซ้าย" + รวม); i ++; // คนสุดท้ายจะนำซองจดหมายสีแดงที่เหลืออยู่ถ้า (i == number) {math.add (รวม); System.out.println ("เธรด" + i + "บุคคลรับ" + ทั้งหมด + "ซ้าย 0"); }} // การเลือกดัชนีของค่าที่ใหญ่ที่สุดในอาร์เรย์ System.out.println ("เธรดในซองจดหมายสีแดงรอบนี้" + (math.indexof (คอลเลกชัน max (คณิตศาสตร์)) + 1) + "โชคดีที่สุด"); -สำหรับเนื้อหาที่น่าตื่นเต้นมากขึ้นโปรดคลิก "สรุปการสอนการพัฒนา Android WeChat" และ "สรุปการสอนการพัฒนา Java WeChat" ยินดีต้อนรับทุกคนที่จะเรียนรู้และอ่าน
ข้างต้นเป็นอัลกอริทึมซองจดหมายสีแดงแบบสุ่ม WeChat ต่างๆที่คุณใช้ร่วมกันซึ่งให้แนวคิดที่หลากหลายแก่คุณ ฉันหวังว่ามันจะเป็นประโยชน์สำหรับทุกคนในการเรียนรู้การใช้อัลกอริทึมซองจดหมายสีแดงแบบสุ่ม WeChat ฉันหวังว่าคุณจะยังคงให้ความสนใจกับเนื้อหาที่น่าตื่นเต้นมากขึ้นจาก Wulin.com