Ich habe nichts zu tun, und in letzter Zeit muss ich die Nutzungsmeldung auf der Homepage aufschreiben, um Cash -Red -Umschläge zu entdecken, und es gibt keine Begrenzung. Ich habe gerade berechnet, wie man schreibt, wenn es eine Grenze gibt. Ich denke, das ähnelt den Wechat Red -Umschlägen. Nach Abschluss der Projektanforderungen. Ich habe zufällig den Algorithmus zur Entfernung von Red Envelope gepostet, den ich selbst geschrieben habe. Ich persönlich denke, dieser Algorithmus simuliert eher die tatsächlichen Regeln für rote Umschlag. Sagen Sie weniger Unsinn. Veröffentlichen Sie zuerst den Code;
Import Java.math.bigdecimal; Import Java.util.ArrayList; Import Java.util.Collections; Import Java.util.List; Math (BigDecimal.Valueof (10), 6); if (moneys! = null) {BigDecimal b = new BigDecimal (0); für (BigDecimal BigDecimal: Moneys) {System.out.print (BigDecimal + "Yuan"); B = B.Add (BigDecimal); } System.out.print ("Gesamtmenge:" + b + "yuan"); System.out.println (); }}} /*** Berechnen Sie die Menge der von jeder Person erhaltenen roten Umschläge; Die minimale Menge an roten Umschlägen pro Person beträgt 0,01 Yuan pro Person* @param mm Gesamtrote Umschläge* @param Anzahl der Personen* @return*/ public staticlist <BigDecimal> math (BigDecimal mmmm, int Nummer) {if (mmm.doulblevalue () <Nummer* 0,01) {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{if) {) {{{{if) rot. } Random Random = new random (); // Geld, 10 Yuan wird durch Brüche berechnet, die 1000 Punkte in Geld = mmmm.multiply (BigDecimal.Valueof (100)). IntValue (); // Gesamtzahl der Zufallszahl double count = 0; // Jede Person erhält zufällige Punkte doppelt [] arrrandom = new Double [Nummer]; // Jede Person erhält Geldliste <BigDecimal> arrmoney = new ArrayList <BigDecimal> (Nummer); // Die Anzahl der Personen, die zufällige Punkte für (int i = 0; i <arrrandom.length; i ++) {int r = random.Nextint ((Nummer) * 99)+1, schleifen; zählen += r; arrrandom [i] = r; } // Berechnen Sie den von jeder Person erhaltenen Betrag, indem Sie die rote Umschlag int c = 0 öffnen; für (int i = 0; i <arrrandom.length; i ++) {// Fügen Sie jede Person hinzu, indem Sie Zufallszahlen hinzufügen, um den Prozentsatz jeder Person Double x = neues Double (Arrrandom [i] / count) zu berechnen; // Jede Person erhält den Betrag, der von jeder Person durch Prozentsatz int m = (int) math.floor (x * Geld) erhalten wurde; // Wenn 0 Betrag erhalten wird, legen Sie den Mindestwert von 1 Cent fest, wenn (m == 0) {m = 1; } // Berechnen Sie den Gesamtbetrag c += m; // Wenn nicht die letzte Person, berechnen Sie sie normalerweise, wenn (i <arrrandom.length - 1) {arrmoney.add (neuer BigDecimal (m) .Divide (New BigDecimal (100))); } else {// Wenn es die letzte Person ist, geben Sie dem verbleibenden Geld der letzten Person arrmoney.add (neuer BigDecimal (Geld - C + M) .Divide (neuer BigDecimal (100)); }} // den Betrag, der von jeder Person collection.shuffle (arrmoney) erhalten wurde, zufällig stören; Return Armoney zurück; }}Die Denklogik dieses Codesatzes:
1. Zunächst müssen wir den roten Umschlagbetrag basierend auf der Anzahl der Personen in n -Aktien unterteilen, jedoch aufgrund des Durchschnittswerts. Wenn jede Person zu gleichmäßig punktet, scheint es spielbar zu sein.
2. Wie sollten wir zweitens unterscheiden? Um sicherzustellen, dass die roten Umschläge spielbar sind. Eigentlich denke ich nicht, dass diese Sache ist. Schließlich hängen rote Umschläge nur vom Glück ab. Ich hatte Pech, Wechat Red -Umschläge für 20 Yuan- und 3 People -Punkte zu spielen. Ich habe auch 0,01 Yuan. Die Parallelität wird auch sehr groß sein. Mein Codes -Satz hat also einfach alle eine zufällige Zahl ausgelegt (der Bereich der Zufallszahlen ist die Anzahl der Personen * 100), fügen Sie die Zufallszahlen dieser Personen zusammen und berechnen Sie den Prozentsatz der Zufallszahl jeder Person. Verteilen Sie die Dividenden nach diesem Prozentsatz.
Das obige ist die Java -Implementierung einfacher Red Envelope -Abgabing -Algorithmus, die vom Editor vorgestellt wurde (simuliert echtes Red Envelope -Greifer). Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!