ฉันไม่มีอะไรจะทำและเมื่อเร็ว ๆ นี้ฉันต้องจดบันทึกผู้ใช้ลงในหน้าแรกเพื่อค้นหาซองจดหมายสีแดงเงินสดและไม่มีการ จำกัด ฉันเพิ่งคำนวณวิธีการเขียนหากมีขีด จำกัด ฉันคิดว่านี่คล้ายกับซองจดหมายสีแดง WeChat หลังจากข้อกำหนดของโครงการเสร็จสมบูรณ์ ฉันเกิดขึ้นเพื่อโพสต์อัลกอริทึมการกำจัดซองจดหมายสีแดงที่ฉันเขียนด้วยตัวเอง โดยส่วนตัวแล้วฉันคิดว่าอัลกอริทึมนี้เป็นการจำลองกฎการคว้าซองจดหมายสีแดงที่แท้จริง พูดเรื่องไร้สาระน้อยลง โพสต์รหัสก่อน
นำเข้า java.math.bigdecimal; นำเข้า java.util.arraylist; นำเข้า java.util.collections; นำเข้า java.util.list; นำเข้า java.util.random; การทดสอบระดับสาธารณะ คณิตศาสตร์ (bigdecimal.valueof (10), 6); if (moneys! = null) {bigdecimal b = ใหม่ bigdecimal (0); สำหรับ (bigdecimal bigdecimal: moneys) {system.out.print (bigdecimal + "yuan"); b = b.add (bigdecimal); } system.out.print ("จำนวนเงินทั้งหมด:" + b + "หยวน"); System.out.println (); }}} /*** คำนวณปริมาณของซองจดหมายสีแดงที่ได้รับจากแต่ละคน; จำนวนซองสีแดงขั้นต่ำต่อคนคือ 0.01 หยวนต่อคน* @param mm ซองจดหมายสีแดงทั้งหมด* @param หมายเลขของคน* @return*/ รายการคงที่สาธารณะ <bigdecimal> คณิตศาสตร์ } สุ่มสุ่ม = ใหม่สุ่ม (); // เงิน 10 หยวนคำนวณโดยเศษส่วนเท่ากับ 1,000 คะแนน int money = mmmm.multiply (bigdecimal.valueof (100)). intvalue (); // จำนวนสุ่มรวมจำนวนสองครั้ง = 0; // แต่ละคนจะได้รับคะแนนสุ่มสองเท่า [] arrrandom = ใหม่สองเท่า [หมายเลข]; // แต่ละคนจะได้รับรายชื่อเงิน <bigdecimal> arrmoney = new ArrayList <bigdecimal> (หมายเลข); // จำนวนคนวนซ้ำคะแนนสุ่มสำหรับ (int i = 0; i <arrrandom.length; i ++) {int r = random.nextint ((หมายเลข) * 99)+1; นับ += r; arrrandom [i] = r; } // คำนวณจำนวนเงินที่ได้รับจากแต่ละคนโดยการเปิดซองจดหมายสีแดง int c = 0; สำหรับ (int i = 0; i <arrrandom.length; i ++) {// เพิ่มแต่ละคนโดยการเพิ่มตัวเลขสุ่มเพื่อคำนวณเปอร์เซ็นต์ของแต่ละคนสองเท่า x = ใหม่สองเท่า (arrrandom [i] / count); // แต่ละคนจะได้รับจำนวนเงินที่ได้รับจากแต่ละคนโดยเปอร์เซ็นต์ int m = (int) math.floor (x * เงิน); // ถ้าได้รับจำนวน 0 ให้ตั้งค่าต่ำสุด 1 เซ็นต์ถ้า (m == 0) {m = 1; } // คำนวณจำนวนเงินทั้งหมด c += m; // ถ้าไม่ใช่คนสุดท้ายให้คำนวณตามปกติถ้า (i <arrrandom.length - 1) {arrmoney.add (ใหม่ bigdecimal (m) .divide (ใหม่ bigdecimal (100))); } else {// ถ้าเป็นคนสุดท้ายให้เงินที่เหลือให้กับบุคคลสุดท้าย arrMoney.add (ใหม่ BigDecimal (Money - C + M) .Divide (ใหม่ BigDecimal (100))); }} // สุ่มขัดขวางจำนวนเงินที่ได้รับจากการรวบรวมแต่ละคน shuffle (arrmoney); กลับมา arrmoney; -ตรรกะการคิดของชุดรหัสนี้:
1. ก่อนอื่นเราต้องแบ่งจำนวนซองจดหมายสีแดงออกเป็นหุ้น N ตามจำนวนคน แต่เนื่องจากค่าเฉลี่ย หากแต่ละคนทำคะแนนได้อย่างสม่ำเสมอเกินไปมันจะสามารถเล่นได้
2. ประการที่สองเราควรแยกแยะความแตกต่างอย่างไร? เพื่อให้แน่ใจว่าซองจดหมายสีแดงสามารถเล่นได้ ที่จริงฉันไม่คิดว่าเรื่องเหล่านี้ ท้ายที่สุดซองจดหมายสีแดงขึ้นอยู่กับโชคเท่านั้น ฉันโชคร้ายในการเล่นซองจดหมายสีแดง Wechat เป็นเวลา 20 หยวนและ 3 คะแนน ฉันยังได้ 0.01 หยวน การพร้อมกันจะมีขนาดใหญ่มาก ดังนั้นชุดรหัสของฉันจึงทำให้ทุกคนมีหมายเลขสุ่ม (ช่วงของตัวเลขสุ่มคือจำนวนคน * 100) เพิ่มจำนวนสุ่มของคนเหล่านี้เข้าด้วยกันและคำนวณเปอร์เซ็นต์ของหมายเลขสุ่มของแต่ละคน แจกจ่ายเงินปันผลตามเปอร์เซ็นต์นี้
ด้านบนเป็นอัลกอริธึมการใช้งาน Java Simple Simple Sensenbing อัลกอริทึมที่แนะนำโดยบรรณาธิการ (จำลองการจับซองจดหมายสีแดงจริง) ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!