Visual Basic: как переделать код? (генерирование чисел)

программирование

Задача такова: надо сгенерировать массив из N элементов, но чтобы они не повторялись:
Я построил код, но числа повторяются, прошу вас доработать.

Dim i, j As Integer
Dim numbers(N) As Integer
Dim repeated As Boolean

For i = 1 To N
numbers(i) = Int(N * Rnd()) + 1
ListBox1.Items.Add(numbers(i))
Next

Вот я построил, но нифига - числа повторяются.

For i = 1 To N
mark:
repeated = 0

numbers(i) = Int(N * Rnd()) + 1

If i > 1 Then
For j = 1 To i
If numbers(i) = numbers(j) Then
repeated = 1
End If
Next
End If

If repeated = 1 Then
GoTo mark
End If

ListBox1.Items.Add(numbers(i))

Next

Если можете, то прошу помочь. спасибо.

Примечание:
>> PetSerAl

Спасибо, то ваш код НЕ совсем работает - геренируется N - 1 элементов, но надо ровно N элементов.
Ответы:
for i = 1 to N
    numbers(i)=i
next
for i = 1 to N-1
    j=int(Math.Floor((N-i+1)*rnd()))+i
    if i<>j then
        k=numbers(i)
        numbers(i)=numbers(j)
        numbers(j)=k
    end if
next


15 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.