Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Zver6233
36 / 36 / 8
Регистрация: 21.06.2013
Сообщений: 271
Записей в блоге: 1
#1

Сгенерировать случайные числа без повторений - C++

19.11.2014, 00:18. Просмотров 840. Ответов 3
Метки нет (Все метки)

Нужно выбрать 8 чисел в диапазоне от 1 до 16 включительно, чтоб они не повторялись. и записать в массив.НЕ понимаю как задать условие чтобы не повторялись числа
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2014, 00:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сгенерировать случайные числа без повторений (C++):

Сгенерировать случайные числа - C++
Ребята, интересует такой вопрос. Ниже представлен кусок кода, который, так сказать, генерирует мат. модель для пакета LP-solve, где...

Сгенерировать случайные числа от 1000 до 1112 - C++
for (int i = 1; i <= 10; i++) { n = 1000 + rand () % 1112; cout << n << endl; } Почему вылазят цифры...

Как сгенерировать случайные числа в заданном интервале? - C++
как правильно сгенерировать вещественный массив на промежутке mas = (float)(rand()%20001)/50); вроде правильно сделал, а в компиляторе...

Сгенерировать случайные числа с плавающей точкой в заданном диапазоне, включающем и отрицательные значения - C++
возникла проблема, не могу решить... раньше когда пользовался функ. ( x + rand() % x ) с целыми числами было все хорошо, но у меня есть...

Сгенерировать массив размером 20 на 20 из чисел от 0 до 15. Сосчитать количество повторений каждого символа. - C++
Всем здорово!Помогите пожалуйста с программами завтра рубежка...(на turbo C,не С++),если можно пожалуйста объясните,или закомментируйте. ...

Нужно чтобы случайные числа вставали в конец массива,а не удаляли числа - C++
#include <iostream> using namespace std; void main() { setlocale(LC_ALL, "Russian"); int n; // кол-во элементов массива ...

3
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3945 / 2169 / 553
Регистрация: 18.10.2014
Сообщений: 3,783
19.11.2014, 01:58 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Zver6233 Посмотреть сообщение
Нужно выбрать 8 чисел в диапазоне от 1 до 16 включительно, чтоб они не повторялись.
Для таких небольших чисел идеально подойдет т.наз "алгоритм Кнута":

Итерируем через весь диапазон от 1 до 16. Принимаем решение брать/не брать число с вероятностью 'сколько осталось найти / сколько осталось просмотреть'

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
#include <iostream>
#include <ctime>
using namespace std;
 
int main()
{
  const unsigned RANGE_LO = 1;
  const unsigned RANGE_HI = 16;
  const unsigned N = 8;
 
  srand(time(NULL));
 
  unsigned a[N];
  unsigned i_a = 0;
 
  for (unsigned i = RANGE_LO; i <= RANGE_HI; ++i)
  {
    unsigned n_iterate = RANGE_HI - (i - RANGE_LO); // Осталось просмотреть
    unsigned n_find = N - i_a; // Осталось найти
 
    if (rand() < n_find * (RAND_MAX + 1) / n_iterate)
      // Берем!
      a[i_a++] = i;
  }
 
  for (unsigned i = 0; i < N; ++i)
    cout << a[i] << endl;
}
Такой алгоритм сгенерирует набор случайных не повторяющихся чисел в возрастающем порядке. Если еще нужно, чтобы и порядок был случайным, то числа следует после этого случайно перемешать: Массив случайных чисел, как сделать чтоб они не повторялись?
1
chelosobaka
0 / 0 / 0
Регистрация: 19.11.2014
Сообщений: 12
19.11.2014, 02:26 #3
без srand он будет выдавать одни и те же значения
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3945 / 2169 / 553
Регистрация: 18.10.2014
Сообщений: 3,783
19.11.2014, 04:06 #4
Цитата Сообщение от chelosobaka Посмотреть сообщение
без srand он будет выдавать одни и те же значения
О чем именно речь?
0
19.11.2014, 04:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2014, 04:06
Привет! Вот еще темы с ответами:

Перестановка без повторений - C++
Всем привет! У меня возникла небольшая проблема при написании программы, буду благодарна за любую помощь. Задание гласит следующее:...

Перестановка без повторений - C++
Сгенерировать перестановку N чисел без повторений. Требуется использовать циклы. Функции пока не прошли.

Перебор без повторений - C++
текст задачи во вложении мой код: #include &lt;iostream&gt; using namespace std; int f(int v) { if (v == 0) return 1; ...

Перестановки без повторений - C++
Требуется дописать исключение повторений в коде,спасибо. #include &lt;iostream&gt; using namespace std; const int N =11; int n,a,p; ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru