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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
MikeB
0 / 0 / 0
Регистрация: 16.12.2012
Сообщений: 29
#1

Генерация уникальных чисел - C++

07.07.2013, 00:17. Просмотров 1176. Ответов 20
Метки нет (Все метки)

Посоветуйте способ генерации УНИКАЛЬНЫХ чисел, чтобы для бинарного дерева подошли...

Спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2013, 00:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Генерация уникальных чисел (C++):

Генерация уникальных случайных чисел - C++
Приветствую. Допустим есть диапазон от 0 до 9. Как сгенерировать число так, чтобы за 10 генераций, это случайное число не было похожим на...

Подсчёт уникальных чисел в массиве - C++
привет не мог бы ты мне не много помочь, вообщем мне нужно подсчитать кол-во уникальных чисел в массиве от -100 до 100, при вводе...

Децентрализованная схема генерации уникальных чисел группой узлов - C++
Добрый день. Подскажите, пожалуйста. Есть группа узлов в сети, необходимо, чтобы каждый узел генерировал свое случайное число,...

Метод поиска по массиву уникальных чисел за один проход - C++
Подскажите какой-нибудь интересный метод поиска по массиву для данного случая: Есть массив {1, 1, 2, 3, 3}; Надо найти неповторяющееся...

Отсортировать массив и подсчитать количество уникальных чисел в массиве - C++
Что не так????????????? #include <clx.h> #pragma hdrstop #include <clx.h> #pragma hdrstop #include<iostream.h> ...

Генерация чисел - C++
Вообщем мне нужно сгенерировать отрицательное вещественное число с 2 цифрами целой и 2 цифрами дробной части. Отрицательное ведь так...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
07.07.2013, 00:28 #2
C++
1
for(int i=0; i<100; ++i)

Если чисел немного, то можно радномно генерировать и забивать в map, а потом смотреть - было оно, или нет. Большим map не должен получиться, т.к. числа генерируются равномерно на отрезке.
Hrobak
288 / 168 / 11
Регистрация: 22.03.2010
Сообщений: 483
Завершенные тесты: 1
07.07.2013, 00:28 #3
Если от 1 до n, то
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <algorithm>
 
const std::size_t SIZE = 20;
 
int main ()
{
    int mas [SIZE];
    for (std::size_t i=0; i<SIZE; ++i)
        mas [i] = i+1;
    std::random_shuffle (mas,mas+SIZE);
    for (std::size_t i=0; i<SIZE; ++i)
        std::cout << mas[i] << " ";
    return 0;
}
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
07.07.2013, 15:38 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <chrono>
#include <random>
#include <algorithm>
#include <iterator>
#include <unordered_set>
 
using namespace std;
 
int main ()
{
    mt19937 gen(chrono::system_clock::now().time_since_epoch().count());
    uniform_int_distribution<int> distr(0, 100000);
    const int unique_requested = 100;
    unordered_set<int> unique_values(100);
    while (unique_values.size() < unique_requested)
        unique_values.insert( distr(gen) );
    cout << unique_requested << " unique values:\n";
    copy( begin(unique_values), end(unique_values),
                ostream_iterator<int>(cout, ", "));
    return 0;
}
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
07.07.2013, 15:44 #5
Olivеr, не факт, что эта штука не зациклится. например, сгенерировав 99 чисел от 1 до 100, за исключением числа 42,
она будет бесконечно выполнять строчку unique_values.insert( distr(gen) ), пока функция distr(gen) не вернёт 42. А произойти это может и не очень то скоро.

Добавлено через 1 минуту
И кстати:
fatal error C1083: Cannot open include file: 'chrono': No such file or directory
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
07.07.2013, 15:46 #6
Kuzia domovenok, ну а какие еще варианты остаются?
Чтобы вероятность зацикливания была меньше нужно указывать больший диапазон

Добавлено через 58 секунд
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
fatal error C1083: Cannot open include file: 'chrono': No such file or directory
chrono появился в C++11
Hrobak
288 / 168 / 11
Регистрация: 22.03.2010
Сообщений: 483
Завершенные тесты: 1
07.07.2013, 15:48 #7
Olivеr, а нельзя к примеру взять мой код сверху, но еще дополнительно умножить каждый элемент массива на случайное число?
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
07.07.2013, 15:52 #8
Цитата Сообщение от Olivеr Посмотреть сообщение
chrono появился в C++11
Это какой то новый язык? Я не так давно устонавливал MSVS2008 вроде новая студия. Всего 6 лет назад заполучил диск с ней.
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
07.07.2013, 15:52 #9
Hrobak, нет
Ваш код генерирует числа от 1 до 20 и перемешивает их.
Если умножать каждое число от 1 до 20 на случайное, то могут быть совпадения:
12*7=84
14*6=84
Hrobak
288 / 168 / 11
Регистрация: 22.03.2010
Сообщений: 483
Завершенные тесты: 1
07.07.2013, 15:53 #10
Olivеr, да, точно, не подумал.
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Это какой то новый язык?
Новый стандарт языка, 2008 студия не поддерживает
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
07.07.2013, 15:53 #11
Kuzia domovenok, это новый стандарт С++
http://ru.wikipedia.org/wiki/C%2B%2B11
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
07.07.2013, 17:18 #12
Цитата Сообщение от Olivеr Посмотреть сообщение
Если умножать каждое число от 1 до 20 на случайное, то могут быть совпадения:
12*7=84
14*6=84
А откуда вытекает необходимость умножения вообще?
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
07.07.2013, 17:50 #13
Цитата Сообщение от Tulosba Посмотреть сообщение
А откуда вытекает необходимость умножения вообще?
Цитата Сообщение от Hrobak Посмотреть сообщение
Olivеr, а нельзя к примеру взять мой код сверху, но еще дополнительно умножить каждый элемент массива на случайное число?
вот
Hrobak
288 / 168 / 11
Регистрация: 22.03.2010
Сообщений: 483
Завершенные тесты: 1
07.07.2013, 17:53 #14
Tulosba, просто хотелось модифицировать код для случайных чисел от 1 до n для другого диапазона; я ступил и предложил умножать их на случайные.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
07.07.2013, 19:48 #15
Цитата Сообщение от Hrobak Посмотреть сообщение
просто хотелось модифицировать код для случайных чисел от 1 до n для другого диапазона
так надо просто константы поменять и всё.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2013, 19:48
Привет! Вот еще темы с ответами:

генерация чисел - C++
написать прогу, которая генерирует последовательность из 10 случайных чисел в диапозоне от 1 до 10, выводит эти числа на экран и вычисляет...

Генерация чисел - C++
Помогите написать программу, а мучусь уже два часа. :) Нужно сгенерировать 30 трёхзначных чисел, и что бы в цифры этих чисел не были...

Генерация чисел - C++
Доброго времени суток, не могли бы вы подсказать как выбрать рандомно число из двух чисел 2 и 4 и в диапозоне от 1 до 4 благодарю

генерация чисел - C++
Скажите, пожалуйста, как сгенерировать случайным образом отрицательные числа?


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.07.2013, 19:48
Ответ Создать тему
Опции темы

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