A coisa mais louca que joguei nos últimos anos é enviar envelopes vermelhos, especialmente durante o Ano Novo Chinês. Escrevi um algoritmo aleatório para envelopes vermelhos abaixo. Na verdade, é bastante simples. Ele fornece apenas uma maneira de pensar. Espero que possa te inspirar.
classe pública wxalgorithm { / *** @param moneySum Digite o valor total* @param rednum Digite o número de pacotes vermelhos* / private estático nulo Aleatório aleatório = novo aleatório (); // exato ponto decimal 2 dígitos numberFormat formatter = new DecimalFormat ("#. ##"); para (int i = 1; i <rednum; i ++) {// um número aleatório, o intervalo de valores está entre o valor mínimo e o balanço string money = formatter.format (random.nextDouble () * (monesum - moneymin)+moneymin); // conversão numérica moneysum = duplo.valueof (formatter.format (moneysum - duplo.valueof (dinheiro))); System.out.println ("th" + i + "envelope vermelho:" + dinheiro + "yuan, equilíbrio:" + monesum); } System.out.println ("Último envelope vermelho:" + moneysum + "yuan, balança:" + (moneysum - moneysum)); } public static void main (string [] args) {wxalgorithm (10.26, 9); }}Mais tarde, alguns algoritmos de envelope vermelho aleatório do WeChat foram coletados on -line para sua referência.
public static duplo [] getMoney (Double Money, int num) {Random r = new Random (); DecimalFormat Format = new DecimalFormat (". ##"); Double Middle = Double.parseDouble (format.format (dinheiro/num)); duplo [] du = novo duplo [num]; duplo redmoney = 0; duplo nextMoney = dinheiro; soma dupla = 0; int index = 0; for (int i = num; i> 0; i-) {if (i == 1) {du [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)); soma = soma + RedMoney; Dou [índice] = RedMoney; meio = duplo.parseDouble (format.format (nextmoney/(i-1))); índice ++; }} retornar Dou; } Aqui está a idéia básica: primeiro calcule o valor médio do envelope vermelho e depois passe um envelope vermelho com um número aleatório de envelopes vermelhos menores que esse valor médio. Depois que o envelope vermelho é enviado, o valor total do envelope vermelho precisa ser reduzido de acordo. Ao mesmo tempo, recalcule a média: o novo valor total (número total do envelope vermelho total -1), até o último envelope vermelho, coloque todo o valor restante.
Também existem muitos interessantes compartilhamento de código -fonte: o algoritmo de alocação de envelope vermelho aleatório simples de Java para implementar o código -fonte.
pacote com.sunron.test; importar java.math.bigdecimal; importar org.junit.test; classe pública hongbao {@test public void testhonbao () {hb (100, 9, 0,01); // valor, número, valor mínimo // zb (); } void hb (total duplo, int num, duplo min) {for (int i = 1; i <num; i ++) {duplo safe_total = (total- (num-i)*min)/(num-i); Double Money = Math.Random ()*(Safe_total-min)+min; Bigdecimal money_bd = novo bigdecimal (dinheiro); Money = Money_BD.SetScale (2, BigDecimal.Round_Half_Up) .DoubleValue (); total = dinheiro total; Bigdecimal total_bd = novo bigdecimal (total); TOTAL = TOTAL_BD.SETSCALE (2, BIGDECIMAL.ROUND_HALF_UP) .DOUBLEVALUE (); System.out.println ("th"+i+"envelope vermelho:"+dinheiro+", o equilíbrio é:"+total+"yuan"); } System.out.println ("th"+num+"envelope vermelho:"+total+", o equilíbrio é: 0 yuan"); } void zb () {for (int a = 0; a <= 10000; a ++) {if (a % 1000 == 0) System.out.println (a); }}}Quando outros estão pegando envelopes vermelhos, estudaremos o algoritmo para envelopes vermelhos aleatórios:
public static void main (string [] args) {// o número de envelopes vermelhos int número = 10; // a quantidade total de flutuação do envelope vermelho total = 100; dinheiro flutuante; // o envelope vermelho mínimo duplo min = 1; duplo max; int i = 1; Lista matemática = new ArrayList (); Decimalformat df = novo decimalformat ("##. ##"); enquanto (i <número) {// verifique se, mesmo que um envelope vermelho seja o maior, cada envelope vermelho não será menor que o valor mínimo dos envelopes vermelhos restantes max = total - min * (número - i); int k = (int) (número - i) / 2; // Verifique se os envelopes vermelhos recebidos pelas duas últimas pessoas não excedem os envelopes vermelhos restantes se (número - i <= 2) {k = número - i; } // O limite médio do envelope vermelho máximo é max = max /k; // verifique se cada envelope vermelho é maior que o valor mínimo e não será maior que o valor máximo em dinheiro = (int) (min * 100 + math.random () * (max * 100 - min * 100 + 1)); dinheiro = (flutuação) dinheiro / 100; // mantém dois lugares decimais em dinheiro = float.parsefloat (df.format (dinheiro)); total = (int) (total*100 - dinheiro*100); total = total/100; math.add (dinheiro); System.out.println ("thread" + i + "individual get" + dinheiro + "esquerda" + total); i ++; // A última pessoa tira o envelope vermelho restante se (i == número) {Math.add (total); System.out.println ("thread" + i + "individual get" + total + "esquerda 0"); }} // Seleção do índice do maior valor no Array System.out.println ("Thread nesta rodada de envelopes vermelhos" + (math.indexof (collection.max (math)) + 1) + "a melhor sorte pessoal"); }Para um conteúdo mais emocionante, clique em "Resumo do tutorial de desenvolvimento do Android WeChat" e "Java WeChat Development Tutorial Resumo" Dê as boas -vindas a todos para aprender e ler.
Os acima são os vários algoritmos de envelope vermelho aleatório do WeChat compartilhados por você, que fornecem uma variedade de idéias. Espero que seja útil que todos aprendam a usar o algoritmo de envelope vermelho aleatório do WeChat. Espero também que você continue prestando atenção a um conteúdo mais emocionante do Wulin.com.