Maison >développement back-end >Problème PHP >Comment implémenter la fonction enveloppe rouge dans le code php

Comment implémenter la fonction enveloppe rouge dans le code php

藏色散人
藏色散人original
2021-11-02 09:39:072682parcourir

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.

Comment implémenter la fonction enveloppe rouge dans le code php

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 de​​stipuler 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 PHP

"

Ce 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn