Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.69
Toshik_
1 / 1 / 0
Регистрация: 17.08.2013
Сообщений: 91
#1

Рандомные числа - C++

20.09.2013, 14:14. Просмотров 3721. Ответов 20
Метки нет (Все метки)

Здравствуйте форумчанине... Хотелось бы спросить, как сгенирировать случайные числа от 1 до 100000 причем так чтобы не повторяться?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
20.09.2013, 14:19     Рандомные числа #2
http://www.cplusplus.com/reference/c...rand/?kw=srand

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/* srand example */
#include <stdio.h>      /* printf, NULL */
#include <stdlib.h>     /* srand, rand */
#include <time.h>       /* time */
 
int main ()
{
  printf ("First number: %d\n", rand()%100000);
  srand (time(NULL));
  printf ("Random number: %d\n", rand()%100000);
  srand (1);
  printf ("Again the first number: %d\n", rand()%100000);
 
  return 0;
}
чтобы не повторялись, записывать числа в массив и проверять - не попадалось ли число
Toshik_
1 / 1 / 0
Регистрация: 17.08.2013
Сообщений: 91
20.09.2013, 14:23  [ТС]     Рандомные числа #3
Цитата Сообщение от Cynacyn Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/* srand example */
#include <stdio.h>      /* printf, NULL */
#include <stdlib.h>     /* srand, rand */
#include <time.h>       /* time */
 
int main ()
{
  printf ("First number: %d\n", rand()%100000);
  srand (time(NULL));
  printf ("Random number: %d\n", rand()%100000);
  srand (1);
  printf ("Again the first number: %d\n", rand()%100000);
 
  return 0;
}
чтобы не повторялись, записывать числа в массив и проверять - не попадалось ли число
Видимо не корректно задал вопрос... Так вот имеется код:
C++
1
2
3
4
5
6
while(a) 
    {
        for(i=0; i<a; i++){
            sum1=W[];
        }
    }
и мне надо чтобы в фрагменте
C++
1
[]
было рандомное число от 1 до 100000 без повторения
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
20.09.2013, 14:24     Рандомные числа #4
Цитата Сообщение от Toshik_ Посмотреть сообщение
так чтобы не повторяться
Если нужно последовательность чисел, которые не повторяются, то делают обычно так:
1. поместить числа нужного диапазона в массив (1..N)
2. перемешать массив http://www.cplusplus.com/reference/a...andom_shuffle/
3. выбирать из массива последовательно
makashello
7 / 0 / 2
Регистрация: 20.09.2013
Сообщений: 18
20.09.2013, 14:26     Рандомные числа #5
#include <cstdlib>
using std::rand;

и генерируешь в скобках число [1+rand%100000], как я понимаю. А если числа повторяются в массиве, то надо проверку написать с помощью циклов все же просто
Байт
Эксперт C
15537 / 9879 / 1484
Регистрация: 24.12.2010
Сообщений: 18,475
20.09.2013, 14:55     Рандомные числа #6
Заполнить массив случайными неповторяющимися числами
castaway
Эксперт С++
4876 / 3015 / 370
Регистрация: 10.11.2010
Сообщений: 11,075
Записей в блоге: 10
Завершенные тесты: 1
20.09.2013, 15:35     Рандомные числа #7
Ликбез для индивидуалов:
rand() возвращает числа в диапазоне [0;32767]
100000 разных чисел через нее получить нельзя.
Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
20.09.2013, 15:41     Рандомные числа #8
Цитата Сообщение от castaway Посмотреть сообщение
Ликбез для индивидуалов:
rand() возвращает числа в диапазоне [0;32767]
100000 разных чисел через нее получить нельзя.
This value is library-dependent, but is guaranteed to be at least 32767 on any standard library implementation.
MSVCE 2010 в stdlib.h:
C++
1
#define RAND_MAX 0x7fff
Соответственное если изменить RAND_MAX, то можно получить числа больше 32767.
Байт
Эксперт C
15537 / 9879 / 1484
Регистрация: 24.12.2010
Сообщений: 18,475
20.09.2013, 15:47     Рандомные числа #9
Цитата Сообщение от castaway Посмотреть сообщение
rand() возвращает числа в диапазоне [0;32767]
rand возвращает int, а в 32-разрядных системах он значительно больше...

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

Не по теме:

Хотя, возможно я и не прав....

castaway
Эксперт С++
4876 / 3015 / 370
Регистрация: 10.11.2010
Сообщений: 11,075
Записей в блоге: 10
Завершенные тесты: 1
20.09.2013, 16:04     Рандомные числа #10
Ты можешь изменить RAND_MAX, но на результат вывода функции это не повлияет. Эта константа жестко прописана в libc.
Байт, я не понял что ты хотел этим сказать.
lipnev
60 / 60 / 1
Регистрация: 14.09.2013
Сообщений: 145
20.09.2013, 16:13     Рандомные числа #11
Toshik_, вот такой вариант
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
#include <ctime>
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main()
{
    srand(time(NULL));
    int koef=100000/RAND_MAX;
    int rest=100000%RAND_MAX;
    long mas[10]={0};
    mas[0]=rand()*(rand()%koef)+rand()%rest;
    for (int i=1; i<10; i++){
        mas[i]=rand()*(rand()%koef)+rand()%rest;
        for (int j=0; j<i-1; j++){
            if (mas[j]==mas[i]){
                i--;
                break;
            }
        }
    }
    for (int i=0; i<10; i++)
        cout<<mas[i]<<" ";
    cout<<endl;
    system("pause");
}
makashello
7 / 0 / 2
Регистрация: 20.09.2013
Сообщений: 18
20.09.2013, 16:14     Рандомные числа #12
Цитата Сообщение от castaway Посмотреть сообщение
Ликбез для индивидуалов:
rand() возвращает числа в диапазоне [0;32767]
100000 разных чисел через нее получить нельзя.
#define RAND_MAX 0x7fff
900000+rand()%100000;
и смотри что получается
Байт
Эксперт C
15537 / 9879 / 1484
Регистрация: 24.12.2010
Сообщений: 18,475
20.09.2013, 16:21     Рандомные числа #13
Используйте _lrand, и пусть вас не волнуют этих глупостей
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
20.09.2013, 16:35     Рандомные числа #14
Используйте <random> из C++11 тогда уж.
castaway
Эксперт С++
4876 / 3015 / 370
Регистрация: 10.11.2010
Сообщений: 11,075
Записей в блоге: 10
Завершенные тесты: 1
20.09.2013, 21:18     Рандомные числа #15
Цитата Сообщение от makashello Посмотреть сообщение
#define RAND_MAX 0x7fff
900000+rand()%100000;
и смотри что получается
Получится диапазон: [900000;932767]
За это тебе здоровый минус. В будущем будь умнее.
Genn55
358 / 205 / 38
Регистрация: 26.12.2012
Сообщений: 688
20.09.2013, 21:23     Рандомные числа #16
А это не подходит?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iomanip>
#include <iostream>
#include <algorithm>
#include <ctime>
#include <stdlib.h>
 
using namespace std;
 
int main()
{
    const int SIZE=100000;
    srand(time(NULL));
    int mass[SIZE];
        for (int j=0; j<SIZE; j++)
            mass[j] = j+1;
        random_shuffle(mass, mass+SIZE);
        for (int j=0; j<SIZE; j++)
cout << setw(10) << setiosflags(ios::left) << mass[j];
 cout << " \n\n";
}
makashello
7 / 0 / 2
Регистрация: 20.09.2013
Сообщений: 18
21.09.2013, 14:59     Рандомные числа #17
Цитата Сообщение от castaway Посмотреть сообщение
Получится диапазон: [900000;932767]
За это тебе здоровый минус. В будущем будь умнее.
открываем дейтеля и читаем: стр 341 Для GNU C++ значение RAND_MAX равно 214748647, для Visual studio равно 32767. Прежде чем ставить минусы спрашивай какая система и сколько байтов целое число
Байт
Эксперт C
15537 / 9879 / 1484
Регистрация: 24.12.2010
Сообщений: 18,475
21.09.2013, 15:28     Рандомные числа #18
Цитата Сообщение от makashello Посмотреть сообщение
Прежде чем ставить минусы спрашивай какая система и сколько байтов целое число, а не веди себя как идиот
Именно это я и имел в виду, но закрались сомнения. Дейтеля открывать было лень. Спасибо.
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
21.09.2013, 15:31     Рандомные числа #19
Если хочется писать переносимый код, то сгенерить сто тыщ уникальных чисел rand()'ом не получится.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2013, 15:33     Рандомные числа
Еще ссылки по теме:

C++ Не получается создавать рандомные числа
C++ Массив и рандомные числа
C++ Рандомные числа выдают один и тот же результат при их использовании в цикле
C++ Рандомные числа при компиляции
C++ Вывести из файла рандомные числа

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

Или воспользуйтесь поиском по форуму:
makashello
7 / 0 / 2
Регистрация: 20.09.2013
Сообщений: 18
21.09.2013, 15:33     Рандомные числа #20
Цитата Сообщение от Tulosba Посмотреть сообщение
Если хочется писать переносимый код, то сгенерить сто тыщ уникальных чисел rand()'ом не получится.
это понятно=) но как говорится: "На вкус и цвет товарища нет=)" Мы же не знаем как обучается человек. Тема общая и компилятор не подписан
Yandex
Объявления
21.09.2013, 15:33     Рандомные числа
Ответ Создать тему
Опции темы

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