Não tenho nada a fazer e, recentemente, preciso escrever o login do usuário na página inicial para descobrir envelopes vermelhos em dinheiro, e não há limite. Acabei de calcular como escrever se houver um limite. Eu acho que isso é semelhante aos envelopes vermelhos do WeChat. Após a conclusão dos requisitos do projeto. Por acaso, publiquei o algoritmo de remoção de envelope vermelho que escrevi. Pessoalmente, acho que esse algoritmo está simulando mais as regras reais de agarrar envelopes vermelhos. Diga menos bobagem. Publique o código primeiro;
importar java.math.bigdecimal; importar java.util.ArrayList; importar java.util.Collections; importar java.util.list; importar java.util.random; public classe testmain {public static void main (string [] args) {para (int = 0; matemática (bigdecimal.valueof (10), 6); if (dinheiro! = null) {bigDecimal b = novo bigdecimal (0); for (bigdecimal bigdecimal: moneys) {System.out.print (bigdecimal + "yuan"); b = b.add (bigdecimal); } System.out.print ("Valor total:" + b + "yuan"); System.out.println (); }}} /*** Calcule a quantidade de envelopes vermelhos recebidos por cada pessoa; A quantidade mínima de envelopes vermelhos por pessoa é de 0,01 yuan por pessoa* @param mm envelopes vermelhos totais* @param Número de pessoas* @return*/ list estática pública <FigDecimal> Math (bigdecimal mmmm, int) {if (mmm.doubleValue () <número* 0. 01) {Number) {if (mmm.doubleValue () <número* 0.01) {Number) } Aleatória aleatória = novo aleatório (); // dinheiro, 10 yuan é calculado por frações iguais a 1000 pontos int dinheiro = mmmm.multiply (bigdecimal.valueof (100)). Intvalue (); // número total aleatório contagem dupla = 0; // Cada pessoa recebe pontos aleatórios duplos [] arrrandom = novo duplo [número]; // Cada pessoa recebe lista de dinheiro <FigDecimal> arrmoney = new ArrayList <FigDecimal> (número); // o número de pessoas que estão em busca de pontos aleatórios para (int i = 0; i <arrrandom.length; i ++) {int r = random.nextInt ((número) * 99)+1; contagem += r; Arrrandom [i] = r; } // Calcule a quantidade obtida por cada pessoa abrindo o envelope vermelho int c = 0; for (int i = 0; i <arrrandom.length; i ++) {// adiciona cada pessoa adicionando números aleatórios para calcular a porcentagem de cada pessoa dupla x = novo duplo (arrandom [i] / count); // Cada pessoa obtém o valor obtido por cada pessoa por porcentagem int m = (int) math.floor (x * dinheiro); // Se a quantidade 0 for obtida, defina o valor mínimo de 1 centavo se (m == 0) {m = 1; } // Calcule a quantidade total C += m; // Se não for a última pessoa, calcule -a normalmente se (i <arrrandom.length - 1) {arrMoney.add (novo bigdecimal (m) .divida (novo bigdecimal (100))); } else {// Se for a última pessoa, dê o dinheiro restante para a última pessoa arrmoney.add (novo bigdecimal (dinheiro - c + m) .divida (novo bigdecimal (100))); }} // interrompe aleatoriamente o valor obtido por cada pessoa coleções.Shuffle (ArrMoney); retornar ArrMoney; }}A lógica de pensamento deste conjunto de código:
1. Primeiro de tudo, precisamos dividir o valor do envelope vermelho em n ações com base no número de pessoas, mas devido ao valor médio. Se cada pessoa tiver pontuar de maneira uniforme, parecerá ser jogável.
2. Em segundo lugar, como devemos distinguir? Para garantir que os envelopes vermelhos sejam jogáveis. Na verdade, eu não acho que isso importa. Afinal, os envelopes vermelhos dependem apenas da sorte. Eu tive azar ao tocar envelopes vermelhos do WeChat por 20 yuan e 3 pessoas. Eu também tenho 0,01 yuan. A simultaneidade também será muito grande. Portanto, meu conjunto de códigos simplesmente divulga a todos um número aleatório (o intervalo de números aleatórios é o número de pessoas * 100), adicione os números aleatórios dessas pessoas e calcule a porcentagem do número aleatório de cada pessoa. Distribua os dividendos de acordo com essa porcentagem.
O exposto acima é a implementação do Java simples algoritmo de captura de envelope vermelho introduzido pelo editor (simulando a captura de envelope vermelha real). Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!