В компьютерном тестировании часто возникает необходимость выбрать из большого массива Nm вопросов некоторое меньшее количество Nq случайным образом. Существенно, чтобы эти вопросы не повторялись. Если Nm=Nq, то должны быть заданы все вопросы в случайном порядке. Или использовать его в игре.
Я использую такой генератор случайных чисел (элементы, как и всегда в С, нумеруются с нуля):
using System; namespace генераторНеПовторяющихсяЦелыхЧисел { class Program {
Метод GenSetN генерирует множества Nq не повторяющихся целых чисел в диапазоне от 0 до Nm-1. Добавьте его в свое пространство имен проекта и используйте его сколько нужно раз. Если Вам нужно сгенерировать массив qN[] из 3 неповторяющихся чисел в диапазоне от 0 до 7, то нужно просто вызвать метод GenSetN(3,8);
static int GenSetN(int Nq, int Nm, int[] qN) {
Если зададим Nq>Nm, то выполнится перестановка, и тогда Nq < Nm. Это некоторая «защита от дурака», совсем не обязательная в Вашей программе
int p; if (Nq > Nm) { p = Nm; Nm = Nq; Nq = p; }
Создаем объект класса Random и задаем цикл while по k (нам нужно сгенерировать Nq различных целых чисел!). Булевская переменная b — индикатор факта, что новое число отсутствует в формирующемся массиве
Random r = new Random(); int k = 0; while (k < Nq) { p = r.Next(Nm); // новое число bool b = true; // Проверка, имеется ли уже такое число в массиве for (int i = 0; i < k; i++) if (p == qN[i]) { b = false; break; // досрочный выход из цикла for, если такое число уже имеется в массиве }
Если такого числа нет, то добавим его в наш массив:
if (b) { qN[k] = p; k++; } } // конец цикла while return Nq; // возврат Nq - фактическая длина массива }
Проверку метода GetSetN можно сделать, например, так:
static void Main(string[] args) { int Nq = 25; int Nm = 50; // не больше 100 ! int[] qNumber = new int[100]; // Результат Nq = GenSetN(Nq, Nm, qNumber); for (int i = 0; i < Nq; i++) Console.Write(" {0} ", qNumber[i]); Console.ReadKey(); } } }
Имея такой массив, легко организовать выбор вопросов из всего множества вопросов тестирования.
NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.
![]() |
![]() |
![]() |
![]() |
Не могли бы вы лучше разъяснить логику работы Генератор множества не повторяющихся целых чисел. Добавить больше комментариев в код и что означают переменные
Павел, добавил в текст.