Hal paling gila yang pernah saya mainkan dalam beberapa tahun terakhir adalah mengirim amplop merah, terutama selama Tahun Baru Cina. Saya menulis algoritma acak untuk amplop merah di bawah ini. Ini sebenarnya cukup sederhana. Ini hanya memberikan cara berpikir. Saya harap ini dapat menginspirasi Anda.
kelas publik wxalgorithm { / *** @param moneysum Masukkan jumlah total* @param rednum Masukkan jumlah paket merah* / private static void wxalgorithm (moneysum ganda, int rednum) {// atur jumlah minimum moneymin ganda = 0,01; Acak acak = acak baru (); // titik desimal yang tepat 2 digit angka formatter = new decimalformat ("#. ##"); untuk (int i = 1; i <rednum; i ++) {// Angka acak, kisaran nilai adalah antara nilai minimum dan string saldo uang = formatter.format (random.nextdouble () * (moneysum - moneymin)+moneymin); // konversi numerik moneysum = double.valueof (formatter.format (moneysum - double.valueof (uang))); System.out.println ("th" + i + "amplop merah:" + uang + "yuan, saldo:" + moneysum); } System.out.println ("Amplop Merah Terakhir:" + Moneysum + "Yuan, Balance:" + (Moneysum - Moneysum)); } public static void main (string [] args) {wxalgorithm (10.26, 9); }}Kemudian, beberapa algoritma amplop merah acak WeChat dikumpulkan secara online untuk referensi Anda.
public static double [] getMoney (uang ganda, int num) {acak r = acak baru (); Format decimalformat = decimalformat baru (". ##"); double middle = double.parsedouble (format.format (uang/num)); Double [] dou = Double [num] baru; Double Redmoney = 0; ganda nextmoney = uang; Jumlah ganda = 0; INT INDEX = 0; untuk (int i = num; i> 0; i-) {if (i == 1) {dou [index] = nextMoney; } else {while (true) {string str = format.format (r.nextdouble ()*nextMoney); redmoney = double.parsedouble (str); if (redmoney> 0 && redmoney <middle) {break; }} nextmoney = double.parsedouble (format.format (nextMoney - redmoney)); jumlah = jumlah + redmoney; Dou [indeks] = RedMoney; tengah = double.parsedouble (format.format (nextMoney/(i-1))); indeks ++; }} return dou; } Berikut adalah ide dasar: Pertama -tama hitung nilai rata -rata amplop merah, dan kemudian lewati amplop merah dengan jumlah acak amplop merah lebih kecil dari nilai rata -rata ini. Setelah amplop merah dikirim, jumlah total amplop merah perlu dikurangi. Pada saat yang sama, menghitung ulang rata -rata: jumlah total baru % (total total amplop merah -1), sampai amplop merah terakhir, masukkan semua jumlah yang tersisa.
Ada juga banyak berbagi kode sumber yang menarik: algoritma algoritma amplop merah sederhana Java untuk mengimplementasikan kode sumber.
Paket com.sunron.test; import java.math.bigdecimal; impor org.junit.test; kelas publik hongbao {@test public void testhonbao () {hb (100, 9, 0,01); // jumlah, jumlah, nilai minimum // zb (); } void hb (total ganda, int num, double min) {for (int i = 1; i <num; i ++) {double safe_total = (total- (num-i)*min)/(num-i); uang ganda = math.random ()*(safe_total-min)+min; BigDecimal Money_BD = BigDecimal baru (uang); Money = money_bd.setscale (2, BigDecimal.round_half_up) .doublevalue (); total = total uang; BigDecimal Total_BD = BigDecimal baru (Total); total = total_bd.setscale (2, bigdecimal.round_half_up) .doublevalue (); System.out.println ("th"+i+"Red amplop:"+uang+", saldo adalah:"+total+"yuan"); } System.out.println ("th"+num+"Red amplop:"+total+", keseimbangan adalah: 0 yuan"); } void zb () {for (int a = 0; a <= 10000; a ++) {if (a % 1000 == 0) system.out.println (a); }}}Ketika orang lain meraih amplop merah, kami akan mempelajari algoritma untuk amplop merah acak:
public static void main (string [] args) {// Jumlah amplop merah int nomor = 10; // Jumlah total float amplop merah total = 100; uang mengambang; // Minum ganda amplop merah minimum = 1; Max ganda; int i = 1; Daftar matematika = arraylist baru (); Decimalformat df = new decimalformat ("##. ##"); sementara (i <number) {// Pastikan bahwa meskipun amplop merah adalah yang terbesar, setiap amplop merah tidak akan kurang dari nilai minimum dari amplop merah yang tersisa maks = total - min * (angka - i); int k = (int) (angka - i) / 2; // Pastikan amplop merah yang diterima oleh dua orang terakhir tidak melebihi amplop merah yang tersisa jika (angka - i <= 2) {k = angka - i; } // Batas rata -rata amplop merah maksimum adalah maks = maks /k; // Pastikan setiap amplop merah lebih besar dari nilai minimum dan tidak akan lebih besar dari nilai maksimum uang = (int) (min * 100 + math.random () * (maks * 100 - min * 100 + 1)); uang = (float) uang / 100; // mempertahankan dua tempat desimal uang = float.parsefloat (df.format (uang)); Total = (int) (Total*100 - Uang*100); Total = Total/100; Math.add (uang); System.out.println ("Thread" + I + "Individual Get" + Money + "Left" + Total); i ++; // Orang terakhir mengambil amplop merah yang tersisa jika (i == angka) {math.add (total); System.out.println ("Thread" + i + "Individual Get" + Total + "Left 0"); }} // Pemilihan indeks nilai terbesar di array System.out.println ("Thread dalam putaran amplop merah ini" + (Math.indexof (collections.max (matematika)) + 1) + "Keberuntungan pribadi terbaik"); }Untuk konten yang lebih menarik, silakan klik "Ringkasan Tutorial Pengembangan Android WeChat" dan "Java WeChat Development Tutorial Ringkasan" Selamat datang semua orang untuk dipelajari dan dibaca.
Di atas adalah berbagai algoritma amplop merah acak wechat yang dibagikan oleh Anda, yang memberi Anda berbagai ide. Saya harap akan sangat membantu bagi semua orang untuk belajar menggunakan algoritma amplop merah acak. Saya juga berharap Anda akan terus memperhatikan konten yang lebih menarik dari wulin.com.