Avoiding random duplicates
10,078
Solution 1
The simplest approach IMO would be to generate a sequence of all the possible numbers (i.e. 1-37), shuffle the collection, then take the first seven results.
Searching on Stack Overflow for "Fisher-Yates shuffle C#" will find lots of examples.
In fact, you could modify the Fisher-Yates shuffle to yield results as you took them, so you could write a method such as:
var numbers = Enumerable.Range(1, 37).Shuffle().Take(7).ToList();
Solution 2
You could take a dictionary but make sure that you prevent duplicate key insertion. Keys of dictionary would serve as the unique numbers you need
Related videos on Youtube
Author by
Leth
Updated on January 13, 2023Comments
-
Leth over 1 year
System.Random generator = new Random(DateTime.Now.Millisecond); int[] lotteryNumber = new int[7]; Console.WriteLine("Your lottery numbers: "); for (int i = 0; i<7; i++) { lotteryNumber[i] = generator.Next(1, 37); Console.Write("{0} ",lotteryNumber[i]); } Console.ReadLine();
I need to make a program that prints 7 lottery numbers, but without duplicates. The code above prints 7 random numbers in the range of (1-37), but duplicates appaer. I need a way to prevent duplicate numbers from appearing.
-
Amber over 11 yearsthis method will have an obvious overhead but will be fool proof in scrapping duplicity.
-
Leth over 11 yearsThanks, that worked like a charm! I've not yet learned about the first sentence of code you wrote. The "Enumerable.Range(1, 37).ToArray();" part, so i guess there must be another method for achieving the same.
-
Rawling over 11 yearsYou could just do
int[] allPossibleNumbers = new int[] { 1, 2, 3, 4, 5, /*yawn */, 36, 37 };
- mine's just the lazy version.