Member 13284925 Ответов: 4

Код C# для отображения случайных чисел для 2-х различных диапазонов. Например, range1 (0-10) и range2(11-12)


всем привет
мне нужен код c# для отображения случайных чисел из двух диапазонов.
он должен быть показан вот так.диапазон 1(0,5) диапазон 2 (6,10) и они не должны повторяться
range1        range2
1             6
2             7 
3             8
4             9   
5             10


Что я уже пробовал:

    Random rand = new Random();
    List<int> randomNumbers = new List<int>();

    int range1;
    int range2;

    for (int i = 0; i < 6; i++)
    {
        do
        {
            range1 = rand.Next(0, 10);

        } while (randomNumbers.Contains(range1));
        randomNumbers.Add(range1);
        Console.WriteLine("{0}", range1);

    }

    Random num = new Random();
    List<int> number = new List<int>();

    for (int j = 0; j < 6; j++)
    {
        do
        {
            range2 = num.Next(11, 20);


        } while (number.Contains(range2));
        number.Add(range2);

        Console.WriteLine("{0}", range2);

    }

    Console.ReadLine();
}

Prifti Constantine

Вы можете создать метод, который принимает два параметра, а затем использовать случайный класс c# и генерировать их совершенно случайным образом!

4 Ответов

Рейтинг:
11

Member 13284925

thank you so very much guys but i have manage to get what i was looking for here is my code. but i still think it needs a little bit of works. its kinda rough on the edges.

<pre>Random rand = new Random();
            HashSet<int> number1 = new HashSet<int>();
            HashSet<int> number2 = new HashSet<int>();
            HashSet<int> number3 = new HashSet<int>();
            HashSet<int> number4 = new HashSet<int>();

            int range1;
            int range2;
            int range3;
            int range4;
            for (int i = 0; i <= 20; i++)
            {
                do
                {
                    range1 = rand.Next(0, 10);

                } while (number1.Contains(range1));
                number1.Add(range1);

                    do
                    {
                        range2 = rand.Next(11, 21);


                    } while (number2.Contains(range2));
                    number2.Add(range2);
                do
                {
                    range3 = rand.Next(22, 32);

                } while (number3.Contains(range3));
                number3.Add(range3);
                do
                {
                    range4 = rand.Next(33,43);

                } while (number4.Contains(range4));
                number4.Add(range4);

                    Console.WriteLine("{0,4}{1,4}{2,4}{3,4}", range1,range2,range3,range4);
            }
            Console.ReadLine();
        }


Рейтинг:
1

Pete O'Hanlon

Если бы я делал это, я бы хотел создать две коллекции на основе хэша. Для обоих наборов коллекций я бы создал случайное число и попытался добавить его в коллекцию - если я не могу добавить его, потому что это число уже присутствует, я бы добавил другое. Контроль, который вы установили, заключается в том, что размер каждой коллекции основан на разнице между первым и вторым числом, поэтому диапазон 1 будет основан на расстоянии между 5 и 0. Теперь вы знаете, как это сделать, все, что вам осталось сделать, это закодировать его (как подсказка, полезной коллекцией на основе хэша здесь будет HashSet<int>).


0x01AA

Извините, у меня есть вопрос: почему "коллекции на основе хэша", а не просто две коллекции со случайными числами?
Заранее спасибо.

Pete O'Hanlon

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

0x01AA

Большое спасибо.

Рейтинг:
0

OriginalGriff

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

List<int> range1 = Enumerable.Range(0, 6).ToList();
List<int> range2 = Enumerable.Range(6, 4).ToList();

Затем вытащите числа в соответствии со случайным индексом и удалите его из соответствующего списка:
Random rand = new Random();
for (int i = range1.Count - 1; i >= 0; i--)
    {
    int randomIndex = rand.Next(range1.Count);
    Console.WriteLine(range1[randomIndex]);
    range1.RemoveAt(randomIndex);
    }


Member 13284925

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

Random rand = новый случайный();
List< int> Number = новый список< int>();
List< int> num = новый список< int>();
int диапазон;
инт сетей2;
for (int i = 0; i < 12; i++)
{
range = rand. Next(0, 10);
range2 = rand. Next(11, 21);
если (! число.Содержит (диапазон) &&! num.Содержит(range2))
{
//range = rand. Next(0, 10);
Номер.Добавить (диапазон);
номер.Добавить (range2);
Приставка.Пиши("{0,2} {1,2}", диапазон, range2);
If (i % 1 == 0) консоль.метод WriteLine();
}
}
Приставка.Линия чтения();
}

Рейтинг:
0

Patrice T

Цитата:
они не должны повторяться

Это делает его не случайным, это перемешивание Точно так же, как с картами.

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

Существует еще один метод перетасовки значений.
Допустим, вы хотите перетасовать 52 карты.
- составьте список из 52 значений в массиве.
- выберите случайную позицию между 0 и 51 и замените эту позицию на позицию 0.
- выберите случайную позицию между 1 и 51 и замените эту позицию на позицию 1.
- выберите случайную позицию между 2 и 51 и замените эту позицию на позицию 2.
- повторяйте до тех пор, пока не будет перетасовано достаточное количество карт.
- считайте массив, это ваш результат.

Преимущество, оно не вырождается, для 52 карт вам нужно 51 использование случайной функции.