Heute Abend hatte ich eine plötzliche Idee und schickte einen roten Umschlag an die Alumni-WeChat-Gruppe. Ich legte den Gesamtbetrag des roten Umschlags auf 10 Yuan fest, sodass 28 Personen ihn nach dem Zufallsprinzip erhalten konnten.
Ein interessantes Ergebnis erschien:
A erhielt 0,26 Yuan
B erhielt 0,29 Yuan
C erhielt 0,02 Yuan
D erhielt 0,56 Yuan
E erhielt 0,64 Yuan
...
Welchen Algorithmus verwendet WeChat dazu? Ich habe einfach bei Baidu nachgeschaut und festgestellt, dass es in Zhihu noch keine offizielle Erklärung gibt. Klicken Sie hier, um den Link zu lesen. Ihre Diskussion ist jedoch zu ausführlich und scheint eine Falle zu sein.
Ich habe es nach meiner eigenen Logik versucht:
Jeder muss den roten Umschlag erhalten können; Jeder: Die Summe der von den einzelnen Personen erhaltenen Beträge für rote Umschläge ist unterschiedlich >
4. Der Algorithmus muss einfach sein, sonst schlägt die Tencent-Signatur fehl Erstellen Sie vor der formalen Codierung zunächst ein progressives Modell, um die Regeln zu analysieren Stellen Sie den Gesamtbetrag auf 10 ein Yuan, und N Personen werden es zufällig erhalten: An diesem Punkt erscheint das Muster! Beginnen Sie mit dem Codieren!N=1 则红包金额=X元; N=2 为保证第二个红包可以正常发出,第一个红包金额=0.01至9.99之间的某个随机数 第二个红包=10-第一个红包金额; N=3 红包1=0.01至0.98之间的某个随机数 红包2=0.01至(10-红包1-0.01)的某个随机数 红包3=10-红包1-红包2 ……
header("Content-Type: text/html;charset=utf-8");//输出不乱码,你懂的 $total=10;//红包总额 $num=8;// 分成8个红包,支持8人随机领取 $min=0.01;//每个人最少能收到0.01元 for ($i=1;$i<$num;$i++) { $safe_total=$total-($num-$i)*$min;//随机安全上限 $money=mt_rand($min*100,$safe_total*100)/100; $total=$total-$money; echo '第'.$i.'个红包:'.$money.' 元,余额:'.$total.' 元 <br/>'; } echo '第'.$num.'个红包:'.$total.' 元,余额:0 元';
第1个红包:7.48 元,余额:2.52 元 第2个红包:1.9 元,余额:0.62 元 第3个红包:0.49 元,余额:0.13 元 第4个红包:0.04 元,余额:0.09 元 第5个红包:0.03 元,余额:0.06 元 第6个红包:0.03 元,余额:0.03 元 第7个红包:0.01 元,余额:0.02 元 第8个红包:0.02 元,余额:0 元
header("Content-Type: text/html;charset=utf-8");//输出不乱码,你懂的 $total=10;//红包总额 $num=8;// 分成8个红包,支持8人随机领取 $min=0.01;//每个人最少能收到0.01元 for ($i=1;$i<$num;$i++) { $safe_total=($total-($num-$i)*$min)/($num-$i);//随机安全上限 $money=mt_rand($min*100,$safe_total*100)/100; $total=$total-$money; echo '第'.$i.'个红包:'.$money.' 元,余额:'.$total.' 元 <br/>'; } echo '第'.$num.'个红包:'.$total.' 元,余额:0 元';