Saya tidak ada hubungannya, dan baru -baru ini saya perlu menuliskan login pengguna ke beranda untuk menemukan amplop tunai merah, dan tidak ada batasan. Saya baru saja menghitung cara menulis jika ada batasan. Saya pikir ini mirip dengan amplop merah WeChat. Setelah persyaratan proyek selesai. Saya kebetulan memposting algoritma penghapusan amplop merah yang saya tulis sendiri. Saya pribadi berpikir algoritma ini lebih mensimulasikan aturan ambil amplop merah yang sebenarnya. Katakan lebih sedikit omong kosong. Posting kode terlebih dahulu;
Impor java.math.bigdecimal; import java.util.arraylist; import java.util.collections; import java.util.list; list java.util.random; testmain public {public static void main (string [] args) {for (int i = 0; i <10; i <10; i list {i list [] {for i = 0; i <10; i <10; i <10; i <10; i <10; i <10; i list {i list [] {for i = 0; Matematika (BigDecimal.Valueof (10), 6); if (moneys! = null) {BigDecimal b = BigDecimal baru (0); untuk (BigDecimal BigDecimal: Moneys) {System.out.print (BigDecimal + "Yuan"); b = b.add (BigDecimal); } System.out.print ("Jumlah Total:" + B + "Yuan"); System.out.println (); }}} /*** Hitung jumlah amplop merah yang diterima oleh setiap orang; Jumlah minimum amplop merah per orang adalah 0,01 yuan per orang* @param mm total amplop merah* @param Jumlah orang* @return*/ Daftar statis publik <BigDecimal> Matematika (BigDecimal mmmm, nomor in int) {if (mmm.doublevalue () <angka* 0,01) {if. } Acak acak = acak baru (); // Uang, 10 yuan dihitung dengan fraksi yang sama dengan 1000 poin int ion = mmmm.multiply (BigDecimal.ValueOf (100)). IntValue (); // Total angka acak jumlah ganda = 0; // Setiap orang mendapat titik acak ganda [] arrrandom = double [angka] baru; // Setiap orang mendapat daftar uang <BigDecimal> arrmoney = new ArrayList <BigDecimal> (angka); // Jumlah orang yang melingkarkan titik acak untuk (int i = 0; i <arrrandom.length; i ++) {int r = random.nextInt ((angka) * 99)+1; hitung += r; arrrandom [i] = r; } // Hitung jumlah yang diperoleh oleh masing -masing orang dengan membuka amplop merah int C = 0; untuk (int i = 0; i <arrrandom.length; i ++) {// Tambahkan setiap orang dengan menambahkan angka acak untuk menghitung persentase setiap orang ganda x = ganda baru (arrrandom [i] / count); // Setiap orang memperoleh jumlah yang diperoleh oleh setiap orang dengan persentase int m = (int) Math.floor (x * uang); // jika jumlah 0 diperoleh, atur nilai minimum 1 sen jika (m == 0) {m = 1; } // Hitung jumlah total c += m; // Jika bukan orang terakhir, hitung secara normal jika (i <arrrandom.length - 1) {arrmoney.add (BigDecimal baru (m) .divide (BigDecimal baru (100))); } else {// Jika itu adalah orang terakhir, berikan uang yang tersisa kepada orang terakhir arrmoney.add (BigDecimal baru (uang - c + m) .divide (baru BigDecimal (100))); }} // mengganggu secara acak jumlah yang diperoleh oleh setiap koleksi orang.shuffle (arrmoney); mengembalikan arrmoney; }}Logika pemikiran dari set kode ini:
1. Pertama -tama, kita perlu membagi jumlah amplop merah menjadi N saham berdasarkan jumlah orang, tetapi karena nilai rata -rata. Jika setiap orang mendapat skor terlalu merata, itu tampaknya bisa dimainkan.
2. Kedua, bagaimana kita harus membedakan? Untuk memastikan bahwa amplop merah dapat dimainkan. Sebenarnya, saya tidak berpikir masalah ini. Bagaimanapun, amplop merah hanya bergantung pada keberuntungan. Saya tidak beruntung bermain amplop merah WeChat untuk 20 yuan dan 3 orang poin. Saya juga mendapat 0,01 yuan. Konkurensi juga akan sangat besar. Jadi set kode saya hanya mengeluarkan semua orang nomor acak (kisaran angka acak adalah jumlah orang * 100), tambahkan nomor acak orang -orang ini bersama -sama dan menghitung persentase angka acak setiap orang. Mendistribusikan dividen sesuai dengan persentase ini.
Di atas adalah implementasi Java algoritma ambil amplop merah sederhana yang diperkenalkan oleh editor (mensimulasikan perampasan amplop merah asli). Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!