Uma noite, alguns dias atrás, de repente pensei que deveria haver um algoritmo aleatório para os envelopes vermelhos do WeChat, então tentei escrevê -los eu mesmo, mas não sabia se estava certo. Eu olhei para a declaração online. Parecia que o funcionário não deu um algoritmo definitivo até agora, então tive que me fazer de bobo aqui e postar o código primeiro:
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.
Obrigado pela leitura, espero que isso possa ajudá -lo. Obrigado pelo seu apoio a este site!