Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/76: Рейтинг темы: голосов - 76, средняя оценка - 4.62
45 / 45 / 5
Регистрация: 04.01.2010
Сообщений: 337

Random с пропуском цифр

29.09.2010, 21:07. Показов 15240. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Код:

C#
1
2
Random rnd = new Random()
rnd.Next (1, 11)
Всё отлично. Выпадают значения от 1 до 10.

Теперь собственно вопрос. Как сделать, что бы выпадало, например:

От 1 до 5 и от 8 до 10 (вместе бы выпадало случайным порядком 1 8 4 9 2 (все кроме 6 и 7),
то есть, по русски писалось бы так:

C#
1
2
Random rnd = new Random()
rnd.Next (1 - 6, 8 - 11)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.09.2010, 21:07
Ответы с готовыми решениями:

С помощью Random сгенерировать число без повторяющихся цифр
Здравствуйте. Вообщем нужно создать Random число в которым цифры не повторяются. Есть мысль делать через коллекцию и каждый раз проверять...

Что не так с 'Random' или There is no overloaded version of 'Random' that can be called with these arguments
Доброго времени суток! Я с программированием на "Вы", поэтому очень прошу доходчиво объяснить, что не так с этой строчкой? Выводит ошибку:...

У меня непонятки с методами Math.random() и Random()
Задача : заполнить массив из 15 элементов случайным образом вещественными значениями х (-5 <= x <= 5) class Massiv { ...

22
Заблокирован
29.09.2010, 21:37
Вспомогательный класс, чтобы задавать диапазоны:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sealed class Range
{
    public Range(int minValue, int maxValue)
    {
        MinValue = minValue;
        MaxValue = maxValue;
    }
 
    public int MinValue
    {
        get; private set;
    }
 
    public int MaxValue
    {
        get; private set;
    }
}
Функция генерации случайного числа:
C#
1
2
3
4
5
6
static int GetRandomFromRange(Random rnd, params Range[] ranges)
{
    int idx = rnd.Next(ranges.Length);
    Range range = ranges[idx];
    return rnd.Next(range.MinValue, range.MaxValue);
}
Применение:
C#
1
2
Random rnd = new Random();
int value = GetRandomFromRange(rnd, new Range(1, 6), new Range(8, 11));
Только диапазоны не должны пересекаться, иначе вероятности выпадения чисел могут быть неодинаковыми.
0
45 / 45 / 5
Регистрация: 04.01.2010
Сообщений: 337
29.09.2010, 22:06  [ТС]
А теперь можно всё по полочкам )

Желательно бы просто полный код приложения
0
Заблокирован
29.09.2010, 22:09
Цитата Сообщение от yura097 Посмотреть сообщение
А теперь можно всё по полочкам )
Что именно непонятно?
0
45 / 45 / 5
Регистрация: 04.01.2010
Сообщений: 337
30.09.2010, 11:28  [ТС]
ну.. мне не понятно немножко отрывками кода...

можешь сделать полностью рабочий файл (ну form1.cs к примеру) с тем что ты написал..

например что бы при выпадании числа писалось MessageBox.Show(4uclo);
0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
30.09.2010, 13:57
C#
1
2
3
4
5
6
7
8
9
10
11
12
    Random rnd = new Random();
            //массив с числами, которые не должны выпадать
            int[] except={6,7};            
            int result;
            do
            {
                result = rnd.Next(1,10);
                if (!except.Contains(result))
                    break;
            }
            while (true);
            MessageBox.Show(result.ToString());
0
Заблокирован
30.09.2010, 14:14
Цитата Сообщение от kenny69 Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
11
12
    Random rnd = new Random();
            //массив с числами, которые не должны выпадать
            int[] except={6,7};            
            int result;
            do
            {
                result = rnd.Next(1,10);
                if (!except.Contains(result))
                    break;
            }
            while (true);
            MessageBox.Show(result.ToString());
За такой код нужно руки-крюки отрывать, чтобы больше писать не повадно было.
  • Что, если нужно исключить большой диапазон? Писать int[] except={6,7,8, ... 100,101,102} ?
  • Не позволяет задать несколько диапазонов.
  • Алгоритм недетерминированный. В случае, если исключаемый диапазон довольно большой по отношению к допустимым числам, цикл может крутиться очень долго без надежды на завершение.
  • Ну и лишняя работа для процессора в следствии предыдущего пункта: rnd.Next заранее неизвестно сколько раз вызовется.

Цитата Сообщение от yura097 Посмотреть сообщение
ну.. мне не понятно немножко отрывками кода...

можешь сделать полностью рабочий файл (ну form1.cs к примеру) с тем что ты написал..

например что бы при выпадании числа писалось MessageBox.Show(4uclo);
Консольное приложение сделал:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
using System;
 
namespace TestApp
{
    class Program
    {
        sealed class Range
        {
            public Range(int minValue, int maxValue)
            {
                MinValue = minValue;
                MaxValue = maxValue;
            }
 
            public int MinValue
            {
                get;
                private set;
            }
 
            public int MaxValue
            {
                get;
                private set;
            }
        }
 
        static int GetRandomFromRange(Random rnd, params Range[] ranges)
        {
            int idx = rnd.Next(ranges.Length);
            Range range = ranges[idx];
            return rnd.Next(range.MinValue, range.MaxValue);
        }
 
        static void Main()
        {
            Random rnd = new Random();
 
            for (int i = 0; i < 20; i++)
            {
                int value = GetRandomFromRange(rnd, new Range(1, 6), new Range(8, 11));
                Console.WriteLine(value);
            }
 
            Console.ReadKey();
        }
    }
}

Единственное, мне кажется, я не прав в том, что не задаю вес для каждого диапазона. По-идее, например, диапазон с двумя элементами должен выпадать в два раза чаще, чем диапазон с одним для того, чтобы вероятность выпадения всех чисел была одинакова.

Т.е., наверное, метод GetRandomFromRange нужно написать как-то так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
static int GetRandomFromRange(Random rnd, params Range[] ranges)
{
    var lst = new List<int>();
    for (int i = 0; i < ranges.Length; i++)
        for (int count = 0; count < ranges[i].MaxValue - ranges[i].MinValue; count++)
            lst.Add(i);
 
    int idx = rnd.Next(lst.Count);
 
    Range range = ranges[lst[idx]];
    return rnd.Next(range.MinValue, range.MaxValue);
}
ну и не забудь добавить
C#
1
using System.Collections.Generic;
1
90 / 89 / 13
Регистрация: 28.09.2010
Сообщений: 262
30.09.2010, 14:21
Цитата Сообщение от NightmareZ Посмотреть сообщение
Единственное, мне кажется, я не прав в том, что не задаю вес для каждого диапазона. По-идее, например, диапазон с двумя элементами должен выпадать в два раза чаще, чем диапазон с одним для того, чтобы вероятность выпадения всех чисел была одинакова.
А если так?

C#
1
2
3
4
5
6
7
8
9
        static int GetRandomFromRange(Random rnd, params Range[] ranges)
        {
            List<int> fullRange=new List<int>();
            foreach(Range r in ranges)
            {
                   for (int i=r.MinValue; i<=r.MaxValue; i++) fullRange.Add(i);
            }
            return fullRange[rnd.Next(0, fullRange.Count)];
        }
0
Заблокирован
30.09.2010, 14:24
Цитата Сообщение от planar Посмотреть сообщение
А если так?

C#
1
2
3
4
5
6
7
8
9
static int GetRandomFromRange(Random rnd, params Range[] ranges)
{
    List<int> fullRange=new List<int>();
    foreach(Range r in ranges)
    {
        for (int i=r.MinValue; i<=r.MaxValue; i++) fullRange.Add(i);
    }
    return fullRange[rnd.Next(0, fullRange.Count)];
}
Не успел, я уже в своё сообщение добавил способ
Правда, у меня там индексы добавляются, а у тебя сами элементы.

P.S. Наверное твой вариант даже лучше, ибо у тебя rnd.Next один раз вызывается, а у меня два
0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
30.09.2010, 14:30
Цитата Сообщение от NightmareZ Посмотреть сообщение
Что, если нужно исключить большой диапазон? Писать int[] except={6,7,8, ... 100,101,102} ?
Не позволяет задать несколько диапазонов.
Алгоритм недетерминированный. В случае, если исключаемый диапазон довольно большой по отношению к допустимым числам, цикл может крутиться очень долго без надежды на завершение.
Ну и лишняя работа для процессора в следствии предыдущего пункта: rnd.Next заранее неизвестно сколько раз вызовется.
С этим я полностью согласен. Если не надо вычислений с большим количеством результатов, то и такой примитивный алгоритм пойдет. Твой более универсальный. Дело в затраченном времени и ожидаемого эффекта (например, если надо будет получить рандом по клику, небольшой диапазон, мало исключенных значений).
0
Заблокирован
30.09.2010, 19:44
Всегда был противником чрезмерного усложнения элементарных задач.
NightmareZ, тебе не кажется, что приведенный тобою пример выполняет тоже самое, что будет мною предложено ниже. Возможно я и ошибаюсь. Кстати, я проверил эти два примера на затраченное время и результат оказался не в твою пользу.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
 
    class Program
    {
        static void Main()
        {
           // System.Diagnostics.Stopwatch st = System.Diagnostics.Stopwatch.StartNew();
            Random r = new Random();
            for (int i = 0; i < 20; i++)
            {
                int select = r.Next(0, 2);
                if (select == 0) Console.WriteLine(r.Next(1,6));
                else Console.WriteLine(r.Next(8, 11));
            }
           // Console.WriteLine(st.ElapsedTicks); 
 
 
            Console.ReadKey();
        }
    }
0
45 / 45 / 5
Регистрация: 04.01.2010
Сообщений: 337
30.09.2010, 21:29  [ТС]
NightmareZ и planar Спасибочки.. очень помогли )

Добавлено через 1 час 42 минуты
SSV

Не со всем то же самое.

Способ NightmareZ несколько проще, в плане 1 раз сделал и потом можно несколько раз в коде использовать. Уже проверил, работает неплохо. (Собственно для меня нет разницы 0,2 сек или 0,4)

Теперь же твой способ, получается сначала отбирается первая или вторая половина чисел, а потом из половины отбирать числа.

Может это и проще ) но как то не интересно.
0
Заблокирован
30.09.2010, 21:46
Цитата Сообщение от yura097 Посмотреть сообщение
Может это и проще ) но как то не интересно.
Как скажешь. Тебе виднее.
0
Заблокирован
30.09.2010, 21:49
Цитата Сообщение от SSV Посмотреть сообщение
Всегда был противником чрезмерного усложнения элементарных задач.
NightmareZ, тебе не кажется, что приведенный тобою пример выполняет тоже самое, что будет мною предложено ниже. Возможно я и ошибаюсь. Кстати, я проверил эти два примера на затраченное время и результат оказался не в твою пользу.
Мой код универсальнее. Можно использовать любое количество диапазонов. В моём примере их два было:
C#
1
int value = GetRandomFromRange(rnd, new Range(1, 6), new Range(8, 11));
но можно и три в функцию передать
C#
1
int value = GetRandomFromRange(rnd, new Range(1, 6), new Range(8, 11), new Range(15, 22));
и больше. Такого требования в условиях задачи небыло, потому это не главный мой аргумент. А главный - твой код работает неверно: у тебя вероятности выпадения чисел такие:
1 - 10%
2 - 10%
3 - 10%
4 - 10%
5 - 10%
8 - 16.6%
9 - 16.6%
10 - 16.6%
А по-хорошему у всех должно быть в данном случае - 12.5%
Что это так, можешь легко проверить, написав тесты

Ну и ещё советую прочитать про парадокс Монти Холла (ситуация похожая) и то что я писал в седьмом посте этой темы.
0
Заблокирован
30.09.2010, 22:09
Цитата Сообщение от NightmareZ Посмотреть сообщение
но можно и три в функцию передать
Такая ж беда.
C#
1
2
3
4
int select = r.Next(0, 3);
            if (select == 0) Console.WriteLine(r.Next(1, 6));
            else if (select == 1) Console.WriteLine(r.Next(8, 11));
            else Console.WriteLine(r.Next(15, 22));
Цитата Сообщение от NightmareZ Посмотреть сообщение
и то что я писал в седьмом посте этой темы.
Ну ну... не горячись. Я же предупредил, что возможно я и ошибаюсь и ни кому не навязываю свое мнение, и тем более не считаю себя гуру, как некоторые.
0
Заблокирован
30.09.2010, 23:22
Цитата Сообщение от yura097 Посмотреть сообщение
но как то не интересно.
Давай интереснее сделаем

Итак, первое, что имеем, это класс Range. С помощью него определяются границы диапазона.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public sealed class Range
{
    public Range(int minValue, int maxValue)
    {
        MinValue = minValue;
        MaxValue = maxValue;
 
        if (maxValue <= minValue)
            throw new ApplicationException("maxValue must be greater than minValue.");
    }
 
    public int MinValue
    {
        get; private set;
    }
 
    public int MaxValue
    {
        get; private set;
    }
}
В конструкторе я добавил проверку на то, чтобы MinValue было всегда меньше, чем MaxValue.

Есть мысль, что пользователю может быть лениво следить за тем, чтобы диапазоны не пересекались (особенно, если их много), потому хорошо бы сделать, чтобы сиуации перечения разруливались автоматически.

Объединение пересекающихся диапазонов необходимо потому что иначе вероятности выпадения чисел могут быть неодинаковыми.

Свойство IsIntersect проверяет, не пересекаются ли диапазоны:

C#
1
2
3
4
5
6
7
private bool IsIntersect(Range range)
{
    return (MinValue < range.MinValue && MaxValue > range.MinValue) ||
        (MinValue >= range.MinValue && MinValue < range.MaxValue) ||
        (MaxValue > range.MaxValue && MinValue < range.MaxValue) ||
        (MaxValue <= range.MaxValue && MaxValue > range.MinValue);
}
Метод Intersect объединяет два диапазона (при условии, что они пересекаются):

C#
1
2
3
4
5
6
7
8
9
private Range Intersect(Range range)
{
    if (!IsIntersect(range))
        return null;
 
    return new Range(
        Math.Min(MinValue, range.MinValue),
        Math.Max(MaxValue, range.MaxValue));
}
Метод CheckRanges получает список диапазонов и объединяет все из них, которые пересекаются:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private static Range[] CheckRanges(IEnumerable<Range> arr)
{
    List<Range> ranges = new List<Range>(arr);
 
    tryAgain:
        for (int i = 0; i < ranges.Count; i++)
            for (int j = i + 1; j < ranges.Count; j++)
                if (ranges[i].IsIntersect(ranges[j]))
                {
                    Range newRange = ranges[i].Intersect(ranges[j]);
                    ranges.RemoveAt(j);
                    ranges.RemoveAt(i);
                    ranges.Add(newRange);
                    goto tryAgain;
                }
 
    return ranges.ToArray();
}
Метод GetRandomFromRange я уже описывал. Но теперь он перед получением случайного числа объединяет все пересекающиеся диапазоны с помощью метода CheckRanges:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static int GetRandomFromRange(Random rnd, params Range[] ranges)
{
    ranges = CheckRanges(ranges);
 
    var lst = new List<int>();
    for (int i = 0; i < ranges.Length; i++)
        for (int count = 0; count < ranges[i].MaxValue - ranges[i].MinValue; count++)
            lst.Add(i);
 
    int idx = rnd.Next(lst.Count);
 
    Range range = ranges[lst[idx]];
    return rnd.Next(range.MinValue, range.MaxValue);
}
Класс можно уже использовать:

C#
1
2
3
Random rnd = new Random();
int value = Range.GetRandomFromRange(rnd, new Range(-5, 7), new Range(3, 11));
Console.WriteLine(value);
Но мне кажется, код слишком многословен, потому предлагаю улучшить.
Добавим в класс Range оператор +, который складывает объекты класса Range в список:
C#
1
2
3
4
5
6
7
8
9
10
public static List<Range> operator +(List<Range> lst, Range range)
{
    lst.Add(range);
    return lst;
}
 
public static List<Range> operator +(Range range1, Range range2)
{
    return new List<Range> { range1, range2 };
}
А также опишем класс-хелпер с единственным методом Random:
C#
1
2
3
4
5
6
7
public static class RangeHelper
{
    public static int Random(this List<Range> lst, Random rnd)
    {
        return Range.GetRandomFromRange(rnd, lst.ToArray());
    }
}
Для чего это нужно? Теперь можно вместо
C#
1
int value = Range.GetRandomFromRange(rnd, new Range(-5, 7), new Range(3, 11), new Range(16, 22));
писать
C#
1
int value = (new Range(-5, 7) + new Range(3, 11) + new Range(16, 22)).Random(rnd);
По-моему, так красивее.

Теперь код всей программы:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
using System;
using System.Collections.Generic;
 
namespace TestApp
{
    public sealed class Range
    {
        public Range(int minValue, int maxValue)
        {
            MinValue = minValue;
            MaxValue = maxValue;
 
            if (maxValue <= minValue)
                throw new ApplicationException("maxValue must be greater than minValue.");
        }
 
        public int MinValue
        {
            get;
            private set;
        }
 
        public int MaxValue
        {
            get;
            private set;
        }
 
        private bool IsIntersect(Range range)
        {
            return (MinValue < range.MinValue && MaxValue > range.MinValue) ||
                   (MinValue >= range.MinValue && MinValue < range.MaxValue) ||
                   (MaxValue > range.MaxValue && MinValue < range.MaxValue) ||
                   (MaxValue <= range.MaxValue && MaxValue > range.MinValue);
        }
 
        private Range Intersect(Range range)
        {
            if (!IsIntersect(range))
                return null;
 
            return new Range(
                Math.Min(MinValue, range.MinValue),
                Math.Max(MaxValue, range.MaxValue));
        }
 
        private static Range[] CheckRanges(IEnumerable<Range> arr)
        {
            var ranges = new List<Range>(arr);
 
        tryAgain:
            for (int i = 0; i < ranges.Count; i++)
                for (int j = i + 1; j < ranges.Count; j++)
                    if (ranges[i].IsIntersect(ranges[j]))
                    {
                        Range newRange = ranges[i].Intersect(ranges[j]);
                        ranges.RemoveAt(j);
                        ranges.RemoveAt(i);
                        ranges.Add(newRange);
                        goto tryAgain;
                    }
 
            return ranges.ToArray();
        }
 
        public static int GetRandomFromRange(Random rnd, params Range[] ranges)
        {
            ranges = CheckRanges(ranges);
 
            var lst = new List<int>();
            for (int i = 0; i < ranges.Length; i++)
                for (int count = 0; count < ranges[i].MaxValue - ranges[i].MinValue; count++)
                    lst.Add(i);
 
            int idx = rnd.Next(lst.Count);
 
            Range range = ranges[lst[idx]];
            return rnd.Next(range.MinValue, range.MaxValue);
        }
 
        public static List<Range> operator +(List<Range> lst, Range range)
        {
            lst.Add(range);
            return lst;
        }
 
        public static List<Range> operator +(Range range1, Range range2)
        {
            return new List<Range> { range1, range2 };
        }
    }
 
    public static class RangeHelper
    {
        public static int Random(this List<Range> lst, Random rnd)
        {
            return Range.GetRandomFromRange(rnd, lst.ToArray());
        }
    }
 
    class Program
    {
        static void Main()
        {
            var rnd = new Random();
            var lst = new Range(-5, 7) + new Range(3, 11);
 
            for (int i = 0; i < 20; i++)
            {
                int value = lst.Random(rnd);
                Console.WriteLine(value);
            }
 
            Console.ReadKey();
        }
    }
}
0
45 / 45 / 5
Регистрация: 04.01.2010
Сообщений: 337
01.10.2010, 19:02  [ТС]
NightmareZ, последний вариант уж слишком замудрёный )

твой предыдущий и так отлично работает )

Собственно пишу детский генератор паролей построенный на if'ках (как не странно быстро работает - пароль из 10 тысяч символов строит за секунду (ну может 4 ядра 4 гига дают о себе знать).

У меня создавалась случайная переменная, каждому значению переменной соответствовало значение буквы/символа/цифры.

С помощью примеров ваших создал возможность строить пароль например из букв и цифр или символов и цифр, символов и букв )


Спасибо всем за помощь огромное ) Программку в бета тест выложу в ближайшее время....
0
22 / 21 / 8
Регистрация: 17.02.2011
Сообщений: 399
07.04.2011, 15:08
Здравствуйте, влезаю со своей проблемой. Есть диапазон чисел от 1 до 65536, как заставить функцию рандом выдать мне числа с вероятностью, допустим числа 10 с вероятностью 10/65536, числа 32000 с вероятностью 8/65536, но остальные как получится. Короче говоря, чтобы я мог указывать вероятность выпадения чисел при вызове функции рандом. Я такую штуку реализовал путем увеличения количества экземпляров чисел 10, и 32000, но мне кажется это не слишком изяшно, и губительно для ОЗУ.
0
145 / 145 / 26
Регистрация: 09.10.2009
Сообщений: 261
08.04.2011, 15:27
Цитата Сообщение от leonidSDF Посмотреть сообщение
Здравствуйте, влезаю со своей проблемой. Есть диапазон чисел от 1 до 65536, как заставить функцию рандом выдать мне числа с вероятностью, допустим числа 10 с вероятностью 10/65536, числа 32000 с вероятностью 8/65536, но остальные как получится. Короче говоря, чтобы я мог указывать вероятность выпадения чисел при вызове функции рандом. Я такую штуку реализовал путем увеличения количества экземпляров чисел 10, и 32000, но мне кажется это не слишком изяшно, и губительно для ОЗУ.
Как-то так:
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
29
        static int Rand(Random rand, int firstValue, double firstProbability,
                        int secondValue, double secondProbability,
                        double degree, int leftIntBorder, int rightIntBorder)
        {
            var randomDouble = rand.NextDouble();
            randomDouble *= degree;
 
            var leftBorder = Math.Min(firstProbability, secondProbability);
            var rightBorder = Math.Max(firstProbability, secondProbability);
 
            if (randomDouble < leftBorder)
                return firstValue;
            
            if (randomDouble >= leftBorder && randomDouble < rightBorder)
                return secondValue;
 
            return rand.Next(leftIntBorder, rightIntBorder);
        }
 
        static void Main()
        {
            var r = new Random();
 
            const double fProb = 10.0 / 65536.0;
            const double sProb = 8.0 / 65536.0;
            
            for (var i = 0; i < 1000; i++)
                Console.WriteLine(Rand(r, 10, fProb, 32000, sProb, 0.001, 1, 65536));
        }
П.С. Если что-то будет не ясно, спрашивайте. You're welcome.
0
22 / 21 / 8
Регистрация: 17.02.2011
Сообщений: 399
08.04.2011, 16:06
Добавлено через 1 минуту
Я очень дико извиняюсь. поторопился и неправильно описал задачу.
потом подумал что форум давно закрыт и оформил отдельную тему, если не против присоединяйтесь, я создал тему здесь:
Random c распределением вероятности
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.04.2011, 16:06
Помогаю со студенческими работами здесь

Random, повторы при static Random(1 seed)
Добрый вечер. Использую private static readonly Random, так как крутится в цикле и если убрать static, будут повторы даже в указанием...

Когда твой Random совсем не Random
Мой код ведет себя весьма странно. У меня есть список экземпляров класса в котором (Уж простите что я такое наделал) есть экземпляр другого...

Random и объекты класса (pseudo random)
Всем привет. Есть класс: typedef unsigned int ui; class Player { private: ui health;

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

Цикл for с пропуском
Люди добрые! Вроде детский вопрос, а хорошего ответа не знаю. Если мне надо, чтобы в цикле счётчик пробегал не все значения от начального...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru