C # Wie kann eine Zufallszahl in einem Bereich generiert werden, die auf das untere Ende des Bereichs ausgerichtet ist? [Duplikat]

Nov 19 2020

Helo! Mein Code lautet:

    class Program
        {
            static void Main(string[] args)
            {
                for (int x = 0; x < 15000; x++)
                {
                    int minValue = 1;
                    int maxValue = 1400;
                var rand = new Random();

                List<float> weights = new List<float>();
                List<float> numbers = new List<float>();
                for (int i = minValue; i <= maxValue; i++)
                {
                    weights.Add((int)Math.Pow(i, 0.4));
                    numbers.Add(i);
                }
                weights.Reverse();

                int weightSum = 0;
                foreach (int weight in weights)
                {
                    weightSum += weight;
                }

                List<int> possibleNumberList = new List<int>();

                float randomNumber = rand.Next(minValue, weightSum);

                float leastDifference = 2000000000f;
                int leastDifferenceNumberIndex = -1;
                for (int weightIndex = 0; weightIndex < weights.Count - 1; weightIndex++)
                {
                    if (Math.Abs(weights[weightIndex] - randomNumber) == leastDifference)
                    {
                        leastDifference = Math.Abs(weights[weightIndex] - randomNumber);
                        leastDifferenceNumberIndex = weightIndex;

                        possibleNumberList.Add(weightIndex);
                    }
                    else if (Math.Abs(weights[weightIndex] - randomNumber) < leastDifference)
                    {
                        leastDifference = Math.Abs(weights[weightIndex] - randomNumber);
                        leastDifferenceNumberIndex = weightIndex;
                        possibleNumberList = new List<int>();
                        possibleNumberList.Add(weightIndex);
                    }
                }

                var randFromListR = new Random();

                int listCunt = possibleNumberList.Count;
                int index = randFromListR.Next(0, listCunt);
                WWriteStringToNewLine(possibleNumberList[index].ToString());
            }
        }
    }

Mein Ziel ist es, eine Liste oder ein Array im Bild anzuzeigen

Obwohl mein Maximalwert für mich 1400 wäre.

Mit meinem Code kann ich nur folgende Ausgabe erzielen:

Wenn wir hineinzoomen, können wir sehen, dass es einige höhere Zahlen gibt, die jedoch nur einmal generiert werden.

Wenn wir den Maximalwert des Codes auf 10 setzen, lautet die Ausgabe wie folgt:

{3: 2837, 0: 2813, 4: 2781, 2: 2761, 1: 2759, 5: 273, 6: 264, 7: 262, 8: 250}

Was könnte ich an diesem Code ändern, um richtig zu funktionieren? Was schlagen Sie vor? Sie können mir sogar einen ganz anderen Code geben.

Antworten

1 Warny Nov 19 2020 at 09:16

Wenn Sie eine Funktion auf Ihr zufälliges Ergebnis anwenden, ändert sich Ihre Nummernverteilung. Ich habe Folgendes versucht: Exp (Random.Next (0,10000) / 100d) generiert eine Zahl mit der Partition, die Sie anscheinend suchen

Sqrt (Random.Next (0,10000)) generiert eine Zahl von 0 bis 100 mit einer Quadratwurzel-Partition.

Sie können bei Bedarf den ganzzahligen Teil verwenden