Lo más loco que he jugado en los últimos años es enviar sobres rojos, especialmente durante el Año Nuevo chino. Escribí un algoritmo aleatorio para sobres rojos a continuación. En realidad es bastante simple. Solo proporciona una forma de pensar. Espero que pueda inspirarte.
Clase pública wxalgorithm { / *** @param moneysum Ingrese la cantidad total* @param rednum Ingrese el número de paquetes rojos* / privado void estático wxalgorithm (doble moneysum, int rednum) {// establece la cantidad mínima doble dinero = 0.01; Aleatorio aleatorio = new Random (); // Punto decimal exacto 2 dígitos numberFormat formatter = new DecimalFormat ("#. ##"); para (int i = 1; i <rednum; i ++) {// Un número aleatorio, el rango de valores está entre el valor mínimo y el balance de cadena de cadena de dinero = formatter.format (random.nextDouble () * (noneysum - moneymin)+moneymin); // conversión numérica moneysum = double.ValueOf (formatter.format (moneySum - double.valueOf (dinero))); System.out.println ("th" + i + "sobre rojo:" + dinero + "yuan, balance:" + moneysum); } System.out.println ("Último sobre rojo:" + moneyum + "yuan, balance:" + (moneyum - moneysum)); } public static void main (string [] args) {wxalgorithm (10.26, 9); }}Más tarde, algunos algoritmos de envoltura roja al azar WeChat se recopilaron en línea para su referencia.
public static double [] getMoney (doble dinero, int num) {random r = new Random (); DecimalFormat format = new DecimalFormat (". ##"); double Middle = double.parsedOuble (format.format (dinero/num)); double [] dou = new Double [num]; Doble RedMoney = 0; Doble NextMoney = dinero; doble suma = 0; int index = 0; for (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)); suma = suma + RedMoney; Dou [índice] = RedMoney; medio = double índice ++; }} return dou; } Aquí está la idea básica: primero calcule el valor promedio del sobre rojo y luego pase un sobre rojo con un número aleatorio de sobres rojos más pequeños que este valor promedio. Después de que se envía el sobre rojo, la cantidad total del sobre rojo debe reducirse en consecuencia. Al mismo tiempo, vuelva a calcular el promedio: la nueva cantidad total % (envoltura roja total original número 1), hasta el último sobre rojo, coloca toda la cantidad restante.
También hay muchos intercambios de código fuente emocionantes: el simple algoritmo de asignación de envolvente rojo aleatorio de Java para implementar el código fuente.
paquete com.sunron.test; import java.math.bigDecimal; import org.junit.test; public class Hongbao {@test public void testhonbao () {hb (100, 9, 0.01); // cantidad, número, valor mínimo // zb (); } void hb (doble total, int num, doble min) {for (int i = 1; i <num; i ++) {double safe_total = (total- (num-i)*min)/(num-i); doble dinero = math.random ()*(safe_total-min)+min; BigDecimal Money_BD = new BigDecimal (dinero); Money = Money_BD.SetScale (2, bigDecimal.round_half_up) .DoubleValue (); Total = dinero total; BigDecimal Total_bd = new BigDecimal (total); Total = Total_bd.setscale (2, bigDecimal.round_half_up) .DoubleValue (); System.out.println ("th"+i+"sobre rojo:"+dinero+", el saldo es:"+total+"yuan"); } System.out.println ("th"+num+"envolvente rojo:"+total+", el equilibrio es: 0 yuan"); } void zb () {for (int a = 0; a <= 10000; a ++) {if (a % 1000 == 0) System.out.println (a); }}}Cuando otros toman sobres rojos, estudiaremos el algoritmo para sobres rojos aleatorios:
public static void main (string [] args) {// El número de sobres rojos int número = 10; // La cantidad total de la envoltura roja flota total = 100; dinero flotante; // El sobre rojo mínimo doble min = 1; doble max; int i = 1; List math = new ArrayList (); DecimalFormat df = new DecimalFormat ("##. ##"); Mientras que (i <número) {// asegúrese de que incluso si un sobre rojo es el más grande, cada sobre rojo no será menor que el valor mínimo de los sobres rojos restantes máx = total - min * (número - i); int k = (int) (número - i) / 2; // Asegúrese de que los sobres rojos recibidos por las últimas dos personas no excedan los sobres rojos restantes si (número - i <= 2) {k = número - i; } // El límite promedio del sobre rojo máximo es max = max /k; // Asegúrese de que cada envoltura roja sea mayor que el valor mínimo y no sea mayor que el valor máximo de dinero = (int) (min * 100 + math.random () * (max * 100 - min * 100 + 1)); dinero = (flotante) dinero / 100; // retener dos lugares decimales dinero = float.parsefloat (df.format (dinero)); total = (int) (total*100 - dinero*100); total = total/100; math.add (dinero); System.out.println ("hilo" + i + "individual obtener" + dinero + "izquierda" + total); i ++; // La última persona elimina el sobre rojo restante si (i == número) {math.add (total); System.out.println ("hilo" + i + "individual get" + total + "izquierda 0"); }} // Selección del índice del valor más grande en la matriz System.out.println ("Hilo en esta ronda de sobres rojos" + (Math.Indexof (Collections.max (Math)) + 1) + "La mejor suerte personal"); }Para obtener un contenido más emocionante, haga clic en "Resumen del tutorial de desarrollo de Android WeChat" y "Java WeChat Development Tutorial" Tutorial ", dan la bienvenida a todos para aprender y leer.
Los anteriores son los diversos algoritmos de envoltura roja al azar de WeChat compartidos por usted, que le proporcionan una variedad de ideas. Espero que sea útil para todos aprender a usar el algoritmo de envoltura roja al azar WeChat. También espero que continúe prestando atención a un contenido más emocionante de Wulin.com.