Maison >développement back-end >Problème PHP >Comment implémenter la fonction enveloppe rouge dans le code php
Comment implémenter la fonction d'enveloppe rouge dans le code PHP : 1. Utilisez la méthode distribuer_red_bages pour obtenir des enveloppes rouges porte-bonheur ; 2. Utilisez la méthode Average_red_bages pour obtenir une distribution uniforme des enveloppes rouges 3. Utilisez la méthode rob_red_bages pour obtenir le nombre spécifié ; d'enveloppes rouges.
L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.1, ordinateur DELL G3
Comment implémenter la fonction enveloppe rouge dans le code php ?
Code de fonction enveloppe rouge PHP
On m'a posé cette question il y a quelque temps, récemment j'en parlerai quand j'aurai le temps, c'est assez intéressant
Tout d'abord, classons les méthodes pour récupérer les enveloppes rouges :
Pour les personnes qui envoient des enveloppes rouges, il y a en gros 3 catégories (je n'ai pas encore pensé aux autres, si vous y pensez, vous pouvez me contacter ~)
1. Le nombre d'enveloppes rouges porte-bonheur est variable (tout dépend de la chance)
2. Les nombre spécifié d'enveloppes rouges porte-bonheur (le nombre est certain, au moins un point)
3. Les enveloppes rouges sont divisées également (le nombre est certain, tout le monde le partage également) C'est plus facile à écrire, non ? Hey
Code :
<?php var_dump(rob_red_bages(5 , 10)); var_dump(distribute_red_bages(5)); /* 方法主要功能:拼手气红包(个数不定) 一个参数 参数一: 红包总金额(按分计算) */ function distribute_red_bages($sum){ $sum = $sum*100; $i=0; while($sum>0){ $temp = rand(1 , $sum);//红包值 $sum -= $temp; $arr[$i++] = $temp/100; } //check($arr); return $arr; } /* 方法主要功能:均分红包 两个参数: 参数一: 红包总金额 参数二: 均分个数 */ function average_red_bages($sum , $num){ $res = $sum/$num; for($i=0 ; $i<$num ; $i++){ $arr[$i] = $res; } //check($arr); return $arr; } /* 方法主要功能:规定个数的手气红包 两个参数: 参数一:红包总金额 参数二:红包个数 计算流程,随机生成num个数 求和得到m 用sum/m 得到每个数需要k 用随机数*k */ function rob_red_bages($sum , $num){ $sum = $sum*100; for($i=0 ; $i<$num ; $i++){ $temp = rand(1 , $sum); $arr[$i] = $temp; $sumall += $temp; } $k = $sum/$sumall; for($i=0 ; $i<sizeof($arr); $i++){ $arr2[$i] = $arr[$i]*$k/100; } return $arr2; } /*红包总额检测*/ function check($arr){ foreach($arr as $a){ $sum += $a; echo $a."+"; } echo " 0 =".$sum."\n"; } ?>
Analysons les enveloppes rouges porte-bonheur (je ne parlerai pas du partage à parts égales, tout le monde le sait) :
Le nombre d'enveloppes rouges porte-bonheur est variable : (Montant total : somme)
- --- >Au hasard le premier nombre inférieur à somme : n
---->Soustrayez ce nombre du montant total : temp = somme-n
---->Au hasard un nombre inférieur à temp
-- -->Récurez la méthode ci-dessus jusqu'à ce que le montant total soit 0
---->Renvoie un tableau stockant des résultats aléatoires
Cette méthode est plus conventionnelle et elle peut également être utilisée pour atteindre un nombre spécifié d'enveloppes rouges ! Cependant~
L'idée destipuler le nombre d'enveloppes rouges porte-bonheur (montant total, nombre d'enveloppes rouges num)
----> ---> Pour ces nombres, additionnez pour obtenir allsum
----> Divisez la somme par allsum pour obtenir le multiple commun de tous les nombres générés
----> multiple commun pour obtenir la valeur de chaque enveloppe rouge
Cette méthode Il y a des inconvénients (le résultat final peut être légèrement supérieur à la somme, ou légèrement inférieur à la somme car la division peut donner des nombres irrationnels)
C'est probablement ça ! Bienvenue pour communiquer et apporter des corrections ! ~~~
Apprentissage recommandé : "
Tutoriel vidéo PHPCe qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!