Алгоритм генерирующий ряд неповторяющихся чисел

Компьютеры программирование программы математика базы данных

нужен алгоритм генерирующий ряд из 21го числа, состоящий из цифр от 1 до 21, при условии что ни одна из цифр не повторяется в ряду.
ну типа 1 3 2 4 5 6 7 8 10 9 11 12 13 14 15 16 17 18 19 21 20.
тоесть нельзя так 1 2 2 3 3 3 3 4 6 7 2 13 15 20 16 15 17 18 19 8.
нужен не случайный ряд, а все возможные комбинации ряда.
На любом языке программирования, кроме ассемблера, брэйнфака и тому подобных.= )
(подойдет C, C++, Java, Pascal, Basic, Phyton, Delphy, ШАЯ) тоесть любой язык высокого уровня.
Можно без кода - блок схему хотяб. Посто додуматься не могу.

Примечание:
Не один ряд а массив неповторяющихся рядов с неповторяющимися цифрами в ряду.
Ответы:
Вот на Java:
не обдумываю вопросы, "грязно" сформулированные.
зачем гадать, что хотел выразить вопрошающий...
о хоспаде. это называется поиск (всех) перестановок из n элементов, их всего существует n! штук. алгоритмы хорошо гуглятся.
На бейсике можно так
Dim A(21) As Integer, i As Integer, k As Integer, F As Boolean
Randomize
A(1) = Int(Rnd(1)*21) + 1 ' генерируем 1-ое случайное целое число от 1 до 21
For i = 2 To 21
   Do ' "вечный" цикл
       F = False ' устанавливаем флаг повтора в ЛОЖЬ
       A(i) = Int(Rnd(1)*21) + 1 ' генерируем i-ое случайное число от 1 до 21
       For k = 1 To i - 1
           If A(i) = A(k) Then ' если оно равно какому-то из предыдущих
                F = True ' то устанавливаем флаг повтора в ИСТИНА
                Exit For ' и выскакиваем из цикла проверок. Проверять дальше нет смысла
           End If
       Next k
       If F = False Then Exit Do ' если число не повторяется, выскакиваем из цикла
   Loop ' если число повторяется, возвращаемся и генерируем новое число
Next i
На выходе получили массив A(21), заполненный разными числами от 1 до 21.
А если нужно, скажем, 100 таких массивов, то сделай двойной массив A(100, 21)
и засунь всю программу в цикл
For n = 1 To 100
(здесь эта программа, только вместо A(1), A(i), A(k) пиши A(n, 1) и A(n, i), A(n, k))
Next n
Могу поспорить, что за 100 повторов массив полностью ни разу не повторится.
А собрать массив из ВСЕХ рядов тебе все равно не удастся, потому что всех
21! = 51090942171709440000
Ты такого массива будешь всю жизнь ждать.
Если до такого додуматься не можешь, то может программирование не для тебя? -_-
Каждый раз генерить рандом и проверять во всех рядах, массивах было ли уже число или нет -_-


11 лет назад

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

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

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