Maison > développement back-end > Golang > le corps du texte

Golang implémente l'algorithme à double moyenne et la méthode de récupération des enveloppes rouges

藏色散人
Libérer: 2020-08-15 13:08:19
avant
3939 Les gens l'ont consulté
Vous trouverez ci-dessous

Tutoriel Golang colonne pour vous présenter la méthode de mise en œuvre de l'algorithme de valeur et de récupération des enveloppes rouges. J'espère que cela sera utile aux amis dans le besoin !

Golang implémente l'algorithme à double moyenne et la méthode de récupération des enveloppes rouges

Tout le monde est certainement familier avec la saisie des enveloppes rouges, mais avez-vous déjà réfléchi à la façon de saisir les enveloppes rouges ?

Tout d'abord, nous devons clarifier les exigences et les contraintes des exigences. Il existe trois restrictions principales sur les enveloppes rouges
a Le montant total saisi = le montant total des enveloppes rouges, ni plus ni moins
b La valeur minimale est de 0,01 yuan, c'est-à-dire que chacun a une partc. Tout le monde saisit Le montant des enveloppes rouges reçues doit être calculé en moyenne autant que possible

Supposons que le montant total soit de M yuans, N personnes, le montant de chaque saisie = (0 , (M/N) *2), par exemple, ou Les conditions mentionnées précédemment, le montant est de 100, le nombre de personnes est de 10,
le montant que la première personne saisit est (0,20), la valeur saisi, selon la distribution normale, devrait être d'environ 10, la probabilité d'être bien inférieure à 10 est très élevée Petit, la somme des probabilités est également bien supérieure à 10. On suppose que la valeur que la première personne saisit est de 10 ;

le montant que la deuxième personne récupère est (0,90/9 *2)=(0,20) , le même que celui de la première personne, le montant de l'enveloppe rouge de la deuxième personne doit également être d'environ 10
et ainsi de suite pour les personnes restantes.
J'ai recherché "Conception architecturale des enveloppes rouges WeChat", et cette méthode y est utilisée. Cependant, cet algorithme n'est pas parfait. Si la première personne saisit 15, la portée de la deuxième personne est de (0,18,89). Si la deuxième personne saisit une valeur élevée, cela sera préjudiciable aux personnes derrière

Voyons ensuite comment implémenter cet algorithme à double moyenne dans

golang

package mainimport (
    "fmt"
    "math/rand"
    "time")func main() {
    //10个人 抢10000分  也就是10个人抢100块钱
    count,amount := int64(10),int64(10000)
    remain := amount
    sum := int64(0)
    for i := int64(0);i<count;i++ {
        x := DoubleAverage(count-i, remain)
        remain -= x
        sum += x
        fmt.Println(i+1,"=",float64(x)/float64(100),", ")
    }
    fmt.Println()
    fmt.Println("总和是:",sum)}//提前定义能抢到的最小金额1分var min int64 = 1//二倍均值算法func DoubleAverage(count,amount int64) int64 {
    if count == 1 {
        return amount    }
    //计算出最大可用金额
    max := amount - min*count    //计算出最大可用平均值
    avg := max / count    //二倍均值基础上再加上最小金额 防止出现金额为0
    avg2 := 2 * avg + min    //随机红包金额序列元素,把二倍均值作为随机的最大数
    rand.Seed(time.Now().UnixNano())
    x := rand.Int63n(avg2) + min    return x}
Copier après la connexion
Regardez les résultats :

                                                                         

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!

Étiquettes associées:
source:learnku.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal