Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 3
Регистрация: 08.01.2018
Сообщений: 25

Рандом без повторения

09.01.2018, 21:32. Показов 1941. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Мне нужно сделать рандом так, чтобы после 1 сгенерированного числа это число больше не генерировалось. Я думал решить это так.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
List<int> ispolzovano = new List<int>();
Random rnd = new Random();
bool done = false;
void Button1Click(object sender, EventArgs e)
        {
            
            int value = rnd.Next(1,4);
            if(done == false)
            {
                while(done == false)
                {
                    value = rnd.Next(1,3);
                    if(ispolzovano.Contains(value))
                    {
                        continue;
                    }
                    else
                    {
                        ispolzovano.Add(value);
                        done = true;
                    }
                }
            }
                 }
Но почему-то все равно эту проверку не проходит. В чем же дело?

Добавлено через 13 минут
По-моему я решил проблему!)
нужно после всей этой операции снова ставить done = false для того чтобы он заного проходил операцию while.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.01.2018, 21:32
Ответы с готовыми решениями:

Рандом без повторений
Есть рандом от 1 до 8... Как сделать так, чтобы если рандом выкинул цифру, то после, он ее уже не повторял?

Рандом без повторений
Random part = new Random(); int numb = new int; for (int j = 0; j &lt; numb.Length; j++) { numb =...

Рандом без дубликатов
Добрый день, есть два массива один уже заполнен, второй заполняется рандомом со значениями из первого массива, суть в том, что во втором...

11
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
09.01.2018, 21:52
B_im, тебе такой алгоритм нужен по заданию или ты другого не придумал? Можно использовать словарь: у него ключи уникальны
0
0 / 0 / 3
Регистрация: 08.01.2018
Сообщений: 25
09.01.2018, 22:16  [ТС]
другого не придумал. А что, плохой алгоритм?
0
1524 / 515 / 126
Регистрация: 09.01.2018
Сообщений: 1,614
09.01.2018, 22:28
Ну вот так, например, можно

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        List<int> usedNumbers = new List<int>();
        Random random = new Random();
 
        private int GetValidRandomNumber()
        {
            int i;
            do
            {
                i = random.Next();
            } while (usedNumbers.Contains(i));
 
            usedNumbers.Add(i);
            return i;
        }
0
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
09.01.2018, 22:50
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    class RandomUniq
    {
        private static Random rnd = new Random();
 
        private int[] _values;
 
        private int _position;
 
        public int NumbersLeft { get { return _values.Length - _position; } }
 
        public RandomUniq(int minValue, int maxValue)
        {
            if (minValue >= maxValue)
                throw new ArgumentException("minValue must be lower than maxValue");
 
            _values = Enumerable.Range(minValue, maxValue - minValue).OrderBy(x => rnd.NextDouble()).ToArray();
            _position = 0;
        }
 
        public int Next()
        {
            if (NumbersLeft == 0)
                throw new InvalidOperationException("No more numbers");
 
            return _values[_position++];
        }
    }
}
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
09.01.2018, 23:06
C#
1
2
3
4
5
6
7
8
9
10
static List<int> GetUniqueRandomNumbers(int count, int min, int max)
{
    var dict = new Dictionary<int, int>();
    var rnd = new Random();
    while (dict.Count < count)
    {
        dict[rnd.Next(min, max + 1)]=0;
    }
    return dict.Keys.Select(i=>i).ToList();
}
0
 Аватар для Aferuga
645 / 529 / 324
Регистрация: 20.05.2015
Сообщений: 1,471
10.01.2018, 03:48
По-моему ТС хочет отсортировать массив рандомом это можно сделать так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void Button1Click(object sender, EventArgs e)
        { 
         List<int>  li = orderNew(new List<int>{1,2,3,4});
}
 
        public List<int> orderNew(List<int> li_old)
        {
            Random rand = new Random();
            List<int> li_new = new List<int>();
 
            for (int i = li_old.Count; i > 0; i--)
            {
                int ind = rand.Next(0, li_old.Count);
                li_new.Add(li_old[ind]);
                li_old.RemoveAt(ind);
            }
            return li_new;
        }
1
Эксперт .NET
 Аватар для Usaga
14138 / 9367 / 1350
Регистрация: 21.01.2016
Сообщений: 35,262
10.01.2018, 06:01
B_im, для таких вещей был придуман Регистр сдвига с линейной обратной связью. На пальцах и с картинками объясняется в статье на хабре о заливке экрана в игре Wolfenstein 3D.
1
 Аватар для Aferuga
645 / 529 / 324
Регистрация: 20.05.2015
Сообщений: 1,471
10.01.2018, 07:21
Цитата Сообщение от Usaga Посмотреть сообщение
для таких вещей был придуман Регистр сдвига с линейной обратной связью.
Прикольная реализация правда для колоды карт я бы её не использовал например, потому что из всех возможных комбинаций можно получить лишь столько сколько элементов используется, хотя в действительности их гораздо больше.
0
Эксперт .NET
 Аватар для Usaga
14138 / 9367 / 1350
Регистрация: 21.01.2016
Сообщений: 35,262
10.01.2018, 07:24
Aferuga, данный хитрый алгоритм позволяет вам перебрать всё множество каково бы оно ни было в размере.
0
 Аватар для Aferuga
645 / 529 / 324
Регистрация: 20.05.2015
Сообщений: 1,471
10.01.2018, 08:18
Usaga, Согласен что алгоритм хитрый и при больших объемах нам нет смысла использовать все наборы комбинаций, но при небольших объемах эта зависимость будет прослеживаться гораздо проще. Можно конечно рандомизировать сдвиг, но тогда появляется вероятность повторений, а это возвращает нас к while описаным выше.
С while есть другая проблема учитывая что Random зависит от часов и тело цикла небольшое он может успеть выдать по 10 одинаковых чисел подряд (в зависимости от машины) и так по кругу с каждым новым числом.
Цитата Сообщение от Aferuga Посмотреть сообщение
хотя в действительности их гораздо больше.
Если быть точным n! всех возможных комбинаций, где n-количество элементов.
З. Ы. А вообще надо будет взять на заметку такой подход.
0
Эксперт .NET
 Аватар для Usaga
14138 / 9367 / 1350
Регистрация: 21.01.2016
Сообщений: 35,262
10.01.2018, 08:28
Aferuga, что-то я не понял, что вам в регистре сдвига не понравилось) Какая рандомизация сдвига? Зачем? Чему противоречит размер множества?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.01.2018, 08:28
Помогаю со студенческими работами здесь

Псевдо-рандом без повторений
Всем доброго времени суток, появилась такая проблема, нужно приложения с рандомом, но рандом только на словах, на самом деле есть список...

Рандом string'ов без повторений
Всех с наступившим Новым Годом! Прошу помочь лишь с количеством букв в конечной строке. Вот код: public partial class Form1...

Убрать повторения объекта без использования LINQ
Здравствуйте, подскажите пожалуйста мне как можно убрать повторяющиеся значения в объекте... к примеру есть список студентов с...

colorgrid без повторения
имеется cokorgrid с возможностью выбора fg и bg,как сделать так что бы не возмжео было сразу выбрать два одинаковых цвета,сделал что первое...

Цикл без повторения
Здравствуйте! Создал примитивную функцию &quot;избранное&quot;: if(isset($_GET)){ $idf = (int)$_GET; $resultat =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru