Самая безумная вещь, которую я играл в последние годы, - это отправлять красные конверты, особенно в китайский Новый год. Я написал случайный алгоритм для красных конвертов ниже. Это на самом деле довольно просто. Это только дает способ мышления. Я надеюсь, что это может вдохновить вас.
открытый класс wxalgorithm { / *** @param moneyysum Введите общую сумму* @param rednum Введите количество красных пакетов* / private static void wxalgorithm (двойная Moneyysum, int rednum) {// Установить минимальную сумму двойной moneymin = 0,01; Случайный случайный = new Random (); // Точная десятичная точка 2 цифр numberformat formatter = new DecimalFormat ("#. ##"); for (int i = 1; i <rednum; i ++) {// случайное число, диапазон значений находится между минимальным значением и балансом строки money = formatter.format (random.nextdouble () * (moneyysum - moneymin)+moneymin); // числовое преобразование moneyysum = double.valueof (formatter.format (moneyysum - double.valueof (money))); System.out.println ("th" + i + "Red evvelope:" + money + "yuan, баланс:" + moneyysum); } System.out.println ("Последняя красная конверт:" + moneyysum + "yuan, баланс:" + (moneyysum - moneyysum)); } public static void main (string [] args) {wxalgorithm (10.26, 9); }}Позже, некоторые алгоритмы случайного красного конверта WeChat были собраны в Интернете для вашей ссылки.
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 = new Double [num]; Double Redmoney = 0; Double NextMoney = деньги; двойная сумма = 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 <midne) {break; }} nextmoney = double.parsedouble (format.format (nextmoney - redmoney)); sum = sum + redmoney; Dou [index] = Redmoney; middle = double.parsedouble (format.format (nextmoney/(i-1))); index ++; }} return dou; } Вот основная идея: сначала рассчитайте среднее значение красной оболочки, а затем пропустите красную оболочку со случайным количеством красных конвертов меньше этого среднего значения. После того, как красная конверт отправлена, общая сумма красной оболочки должна быть соответствующим образом уменьшена. В то же время, пересчитывайте среднее значение: новая общая сумма % (исходное общее число красного огибала -1), до последней красной конверты, поместите всю оставшуюся сумму.
Существует также много захватывающего обмена исходным кодом: простой случайный алгоритм распределения о конверте Java для реализации исходного кода.
пакет com.sunron.test; import java.math.bigdecimal; import org.junit.test; открытый класс hongbao {@test public void testhonbao () {hb (100, 9, 0,01); // Количество, число, минимальное значение // zb (); } void hb (двойная общая, int num, двойная мин) {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_bd.setscale (2, bigdecimal.round_half_up) .doublevalue (); Общее = общее количество денег; BigDecimal total_bd = новый BigDecimal (Total); total = total_bd.setscale (2, bigdecimal.round_half_up) .doublevalue (); System.out.println («th»+i+"Red evvelope:"+money+", баланс:"+total+"yuan"); } System.out.println ("th"+num+"Red Overvelope:"+total+", баланс: 0 Yuan"); } void zb () {for (int a = 0; a <= 10000; a ++) {if (a % 1000 == 0) System.out.println (a); }}}Когда другие захватывают красные конверты, мы изучим алгоритм для случайных красных конвертов:
public static void main (string [] args) {// количество красных конвертов int number = 10; // Общая сумма красно -конверта Float Total = 100; плавать деньги; // минимальный красный конверт двойной мин = 1; двойной макс; int i = 1; Список Math = new ArrayList (); Decimalformat df = new DecimalFormat ("##. ##"); В то время как (i <number) {// Убедитесь, что даже если красный огибатель является самой большой, каждая красная конверта будет не меньше, чем минимальное значение оставшихся красных конвертов max = total - min * (число - i); int k = (int) (номер - i) / 2; // Убедитесь, что красные конверты, полученные последними двумя людьми, не превышают оставшихся красных конвертов, если (число - i <= 2) {k = number - i; } // Средний предел максимального красного огибала составляет максимум = max /k; // Убедитесь, что каждая красная оболочка больше минимального значения и не будет больше, чем максимальная стоимость money = (int) (min * 100 + math.random () * (max * 100 - min * 100 + 1)); Money = (float) деньги / 100; // сохранить два десятичных значения Money = float.parsefloat (df.format (money)); общее = (int) (общее*100 - деньги*100); общее = общее/100; Math.add (деньги); System.out.println ("Thread" + I + "индивидуальное" + Money + "Left" + Total); i ++; // Последний человек забирает оставшуюся красную конверт if (i == number) {math.add (total); System.out.println ("Thread" + i + "индивидуальное" + "всего +" слева 0 "); }} // Выбор индекса наибольшего значения в системе массива. }Для получения более захватывающего контента, пожалуйста, нажмите «Резюме для разработки Android WeChat» и «Резюме по разработке Java WeChat» Добро пожаловать, чтобы все учились и прочитали.
Выше приведены различные алгоритмы WeChat Random Red Overvelope, которые используются вами, которые предоставляют вам различные идеи. Я надеюсь, что для всех будет полезно научиться использовать алгоритм WeChat Random Red Overvelope. Я также надеюсь, что вы продолжите обращать внимание на более захватывающий контент от wulin.com.