최근 몇 년 동안 내가 한 가장 미친 점은 특히 구정에 빨간 봉투를 보내는 것입니다. 아래에 빨간 봉투에 대한 임의의 알고리즘을 썼습니다. 실제로 아주 간단합니다. 그것은 단지 사고 방식을 제공합니다. 나는 그것이 당신에게 영감을 줄 수 있기를 바랍니다.
공개 클래스 wxalgorithm { / *** @param moneysum 총 금액을 입력하십시오* @param rednum 빨간 패킷 수를 입력* / 개인 정적 void wxalgorithm (double moneysum, int rednum) {// 최소 금액 double moneymin = 0.01; 랜덤 random = new random (); // 정확한 소수점 2 숫자 NUMBERFORMAT FORMATTEN = NEW DECIMALFORMAT ( "#. ##"); for (int i = 1; i <rednum; i ++) {// 임의의 숫자, 값의 범위는 최소값과 균형 문자열 money = formatter.format (random.nextDouble () * (moneysum -moneymin)+moneymin) 사이에 있습니다. // 수치 변환 moneysum = double.valueof (formatter.format (moneysum -double.valueof (money))); System.out.println ( "th" + i + "빨간 봉투 :" + money + "yuan, 균형 :" + moneysum); } system.out.println ( "마지막 빨간색 봉투 :" + moneysum + "yuan, 균형 :" + (moneysum -moneysum)); } public static void main (String [] args) {wxalgorithm (10.26, 9); }}나중에 일부 WeChat Random Red Envelope 알고리즘은 참조를 위해 온라인으로 수집되었습니다.
public static double [] getmoney (double money, int num) {random r = new random (); Decimalformat Format = New Decimalformat ( ". ##"); double middle = double.parsedouble (format.format (money/num)); double [] dou = 새로운 더블 [num]; 이중 redmoney = 0; Double NextMoney = Money; 이중 합계 = 0; int index = 0; for (int i = num; i> 0; i-) {if (i == 1) {do [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)); 합 = 합계 + redmoney; Dou [index] = redmoney; middle = double.parsedouble (format.format (NextMoney/(i-1))); 색인 ++; }} return dou; } 기본 아이디어는 다음과 같습니다. 먼저 빨간 봉투의 평균 값을 계산 한 다음이 평균 값보다 작은 임의의 빨간 봉투로 빨간 봉투를 전달하십시오. 빨간 봉투가 전송 된 후에는 적색 봉투의 총량을 그에 따라 줄여야합니다. 동시에, 평균을 다시 계산하십시오 : 새로운 총액 % (원래 총 빨간 봉투 번호 -1), 마지막 빨간 봉투까지 나머지 금액을 모두 넣습니다.
소스 코드를 구현하기위한 Java의 간단한 랜덤 레드 엔벨로프 할당 알고리즘과 같은 흥미로운 소스 코드 공유도 많이 있습니다.
package com.sunron.test; import java.math.bigdecimal; import org.junit.test; public class hongbao {@test public void testhonbao () {hb (100, 9, 0.01); // 숫자, 최소 값 // zb (); } void hb (이중 총, int num, double min) {for (int i = 1; i <num; i ++) {double safe_total = (total- (num-i)*min)/(num-i); Double Money = Math.random ()*(safe_total-min)+min; bigdecimal money_bd = 새로운 bigdecimal (Money); money = money_bd.setscale (2, bigdecimal.round_half_up) .doublevalue (); Total = Total-Money; bigdecimal total_bd = 새로운 bigdecimal (Total); Total = Total_bd.setScale (2, bigdecimal.round_half_up) .doublevalue (); System.out.println ( "th"+i+"빨간색 봉투 :"+money+", 균형은 다음과 같습니다."+Total+"Yuan"); } system.out.println ( "th"+num+"빨간 봉투 :"+Total+", 균형은 : 0 위안"); } void zb () {for (int a = 0; a <= 10000; a ++) {if (a % 1000 == 0) system.out.println (a); }}}다른 사람들이 빨간 봉투를 잡을 때, 우리는 임의의 빨간 봉투 알고리즘을 연구합니다.
public static void main (String [] args) {// 빨간 봉투 수 int 번호 = 10; // 빨간 봉투 부동산의 총량 총 = 100; 플로트 돈; // 최소 레드 엔벨로프 이중 최소 = 1; 더블 맥스; int i = 1; List Math = New ArrayList (); Decimalformat df = 새로운 Decimalformat ( "##. ##"); while (i <number) {// 빨간 봉투가 가장 큰 경우에도 각 빨간 봉투는 나머지 빨간 봉투의 최소값보다 적지 않도록하십시오. int k = (int) (번호 -I) / 2; // 마지막 두 사람이받은 빨간 봉투가 나머지 빨간 봉투를 초과하지 않도록하십시오. } // 최대 레드 엔벨로프의 평균 한계는 max = max /k입니다. // 각 빨간 봉투는 최소값보다 크고 최대 값보다 크지 않도록하십시오. Money = (int) (Min * 100 + math.random () * (max * 100 -min * 100 + 1)); 돈 = (플로트) 돈 / 100; // 소수점 이하 두 자리를 유지합니다 Money = float.parsefloat (df.format (Money)); 총 = (int) (총*100- 돈*100); 총 = 총/100; Math.add (돈); System.out.println ( "스레드" + i + "개인 get" + money + "left" + total); i ++; // 마지막 사람은 (i == 번호) {math.add (Total); System.out.println ( "스레드" + i + "개인 get" + Total + "Left 0"); }} // Array System.out.println에서 가장 큰 값의 인덱스 선택 ( "이 레드 봉투 라운드의 스레드" + (math.indexof (collections.max (math)) + 1) + "최고의 개인 운"); }보다 흥미로운 콘텐츠를 보려면 "Android WeChat Development Tutorial Summary"및 "Java WeChat Development Tutorial Summary"를 클릭하십시오.
위의 내용은 귀하가 공유하는 다양한 Wechat Random Red Envelope 알고리즘으로 다양한 아이디어를 제공합니다. WeChat Random Red Envelope 알고리즘을 사용하는 법을 배우는 것이 도움이되기를 바랍니다. 또한 wulin.com의 더 흥미로운 콘텐츠에 계속주의를 기울이기를 바랍니다.