How to generate random lottery numbers for 6 numbers out of 37 and 1 power number out of 7 in VB.NET

1 Answer

0 votes
Imports System

Module LotteryGenerator

    '
    ' This program generates random lottery numbers for:
    '   - choosing 6 distinct numbers out of 37
    '   - choosing 1 distinct power number out of 7
    '
    ' It uses:
    '   - System.Random for random number generation
    '   - Fisher–Yates shuffle to efficiently pick unique numbers
    '   - clean functions and idiomatic VB.NET style
    '

    '---------------------------------------------------------------
    ' shuffleAndPick:
    ' Performs a Fisher–Yates shuffle on the array "arr" of size n.
    ' After shuffling, the first "count" elements are the chosen numbers.
    '
    ' This guarantees:
    '   - all numbers are unique
    '   - uniform randomness
    '   - efficient O(n) performance
    '---------------------------------------------------------------
    Sub ShuffleAndPick(arr() As Integer, n As Integer, count As Integer, rng As Random)
        For i As Integer = n - 1 To 1 Step -1
            Dim j As Integer = rng.Next(i + 1)   ' random index 0..i
            Dim temp As Integer = arr(i)
            arr(i) = arr(j)
            arr(j) = temp
        Next
        ' After shuffle, arr(0..count-1) are the chosen numbers
    End Sub

    '---------------------------------------------------------------
    ' generatePowerNumber:
    ' Returns a single random number in the range [1..max].
    '---------------------------------------------------------------
    Function GeneratePowerNumber(max As Integer, rng As Random) As Integer
        Return rng.Next(1, max + 1)
    End Function

    Sub Main()
        Dim rng As New Random()

        Const mainCount As Integer = 6
        Const mainMax As Integer = 37
        Const powerMax As Integer = 7

        ' Prepare array 1..37
        Dim numbers(mainMax - 1) As Integer
        For i As Integer = 0 To mainMax - 1
            numbers(i) = i + 1
        Next

        ' Shuffle and pick first 6 numbers
        ShuffleAndPick(numbers, mainMax, mainCount, rng)

        ' Sort the first 6 numbers for nicer output
        Array.Sort(numbers, 0, mainCount)

        ' Generate power number
        Dim powerNumber As Integer = GeneratePowerNumber(powerMax, rng)

        ' Output results
        Console.Write("Main numbers (6 out of 37): ")
        For i As Integer = 0 To mainCount - 1
            Console.Write(numbers(i) & " ")
        Next
        Console.WriteLine()

        Console.WriteLine("Power number (1 out of 7): " & powerNumber)
    End Sub

End Module


'
' run:
'
' Main numbers (6 out of 37): 1 4 27 28 32 37 
' Power number (1 out of 7): 1
'

 



answered Jul 28 by avibootz

Related questions

...