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

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

Войти
Регистрация
Восстановить пароль
 
Noxior
3 / 3 / 0
Регистрация: 07.06.2009
Сообщений: 170
#1

просто интересуюсь - C++

23.02.2012, 02:18. Просмотров 478. Ответов 7
Метки нет (Все метки)

1. надо сделать чтобы полностью рандомные числа неповторялись...
srand(time(NULL)) написал.
2. какую сортировку лучше всего использовать? Для будущих программ необходимо все методы знать, или 1 будет достаточно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2012, 02:18
Я подобрал для вас темы с готовыми решениями и ответами на вопрос просто интересуюсь (C++):

просто 2*2 - C++
написать прогу, выводящую элементы массива в порядке возрастания!!! Добавлено через 14 минут Неужели никто не ответит

просто так - C++
int onscreen(FILE *f) { setlocale(LC_ALL,"Rus"); system ("cls"); // очистка консоли rewind (f); // перевод указателя в начало файла...

Просто интересно - C++
#include <iostream> using namespace std; int main() { double z=0; double x=-2; cout<< x*z; system...

Очень просто(x^3) - C++
А как записать Х в кубе?

Всё просто - C++
Напечатать все простые числа, не провосходящее заданое число М..... вот код #include <iostream> #define N 150 int...

просто логарифм - C++
Доброго времени суток! Возникла небольшая проблема: как написать функцию log(a,x), вычисляющую логарифм x по основанию a. Это нужно для...

7
Gepar
1181 / 537 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
23.02.2012, 02:38 #2
Цитата Сообщение от Noxior Посмотреть сообщение
1. надо сделать чтобы полностью рандомные числа неповторялись...
srand(time(NULL)) написал.
Полностью рандомных чисел не бывают, хороший генератор случайных чисел это не столь простая задача как кажется на первый взгляд. Ну да не думаю что тебе это глубоко интересно, после того как ты засеял генератор случайных чисел от времени числа и так генерируются случайные в заданном тобой диапазоне при использовании rand(), что тебе ещё не нравиться? Если хочешь чтобы при каждом запуске они гарантированно не повторялись то можешь например сохранять их в файле, а при запуске сверяться с файлом что такие числа ещё не выпадали, а если такое число уже было - сгенерировать случайное число ещё раз , только это всё не целесообразно же.

Цитата Сообщение от Noxior Посмотреть сообщение
2. какую сортировку лучше всего использовать? Для будущих программ необходимо все методы знать, или 1 будет достаточно?
На практике лучше всего использовать сортировку из stl, а не свою написанную
0
Noxior
3 / 3 / 0
Регистрация: 07.06.2009
Сообщений: 170
23.02.2012, 02:47  [ТС] #3
какую именно сортировку?
алгоритмов сортировок из stl много
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6955 / 3238 / 322
Регистрация: 04.12.2011
Сообщений: 8,931
Записей в блоге: 5
23.02.2012, 03:06 #4
Цитата Сообщение от Noxior Посмотреть сообщение
1. надо сделать чтобы полностью рандомные числа неповторялись...
srand(time(NULL)) написал.
Полностью согласен с Вами Gepar
Цитата Сообщение от Gepar Посмотреть сообщение
хороший генератор случайных чисел это не столь простая задача
Существует еще такая уловка, когда генератором случайных чисел является пользователь. То есть отслеживаем время следующего нажатия клавиши или клика мыши. Недостаток - необходимость диалога. Преимущество - случайность.
0
kravam
быдлокодер
1705 / 892 / 45
Регистрация: 04.06.2008
Сообщений: 5,524
23.02.2012, 03:22 #5
Чтобы числа не повторялись и вся эта мешанина выглядела буолее или менее перемешаной, тут посмотри
Перемешивание двухмерного массива
0
Mr.X
Эксперт С++
3060 / 1705 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
23.02.2012, 08:24 #6
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/////////////////////////////////////////////////////////////////////////////////////////
//Надо сделать чтобы полностью рандомные числа не повторялись.
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <set>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::set<int>   T_set;
/////////////////////////////////////////////////////////////////////////////////////////
bool  successfully_get_unique_rand
    (         
        int     rand_min,
        int     rand_max,
        int&    res
    )
{
    static T_set    old_results;
    int             rand_numbers_total  =   rand_max - rand_min + 1;
 
    bool            bool_res            =       rand_numbers_total >  0
                                            &&  rand_numbers_total <= RAND_MAX + 1
                                            &&  old_results.size() <  unsigned( rand_numbers_total );
 
    if( bool_res )
    {
        do
        {
            res = rand() % rand_numbers_total + rand_min;
        }while( old_results.count(res) );
 
        old_results.insert(res);
    }
    return  bool_res;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()  
{
    srand(unsigned(time(0)));    
 
    int     rand_min    =   rand() % 10 - rand() % 10;
    int     rand_max    =   rand() % 10 - rand() % 10;
 
    std::cout   <<  "rand_min = "
                <<  rand_min
                <<  std::endl
                <<  "rand_max = "
                <<  rand_max
                <<  std::endl;
    
    int     rand_val    =   0;
    while
        (
            successfully_get_unique_rand
                (                    
                    rand_min,
                    rand_max,
                    rand_val
                )
        )
    {
        std::cout   <<  rand_val
                    <<  std::endl;
    }
}
0
Russian_Dragon
10 / 11 / 0
Регистрация: 18.02.2012
Сообщений: 140
23.02.2012, 08:43 #7
Что-то как-то замудрили.
Не повторяющиеся числа, в пределах одного запуска, сделать очень просто.
Нужна коллекция и итератор.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int maxNumber = 100;// максимальное число
vector<int> vectorNumbers;
vector<int>::iterator p;
 
void FillInVector(){
vectorNumbers.clear();
for(int i = 0; i < maxNumber; i++)
vectorNumbers.push_back(i);
p = vectorNumbers.first();
}
 
//пишем "рандомную" функцию для удобства
int myRand(){
p = vectorNumbers.first();
int r = p + rand()%vectorNumbers.size();
vectorNumbers.remove(p);
if(vectorNumbers.size() == 0) void FillInVector();
return r;
}
Вот и всё.
Суть простая мы случайно извлекаем из коллекции числа, а потом это число удаляем.
0
diagon
Higher
1936 / 1202 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.02.2012, 09:09 #8
Или так
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
29
30
31
32
#include <iostream>
#include <array>
#include <stdexcept>
 
const int MAX_RAND = 1e5;
 
int unique_rand( int max_rand )
{   
    if ( max_rand > MAX_RAND )
        return -1;
        
    static std::array< bool, MAX_RAND > arr;
    
    int res;    
        
    do
    {
        res = rand() % max_rand;
    } while ( arr[res] == true );
    
    arr[res] = true;
    
    return res;
}
 
int main()
{   
    for (int i = 0; i < 10; ++i)
    {
        std::cout << unique_rand( 10 ) << std::endl;
    }
}
Должно работать быстрее, чем вариант с сортировкой, но будет зацикливание, когда массив полностью заполнится, ну и просто может тормозить, если свободные числа заканчиваются.
Цитата Сообщение от Noxior Посмотреть сообщение
какую именно сортировку?
алгоритмов сортировок из stl много
Две всего.
std::sort и std::stable_sort
Первая быстрее, вторая стабильнее.
Ну и еще есть различные контейнеры вроде set'a и priority_queue, а также nth элемент, но это не совсем сортировка.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2012, 09:09
Привет! Вот еще темы с ответами:

Просто посмотрите! - C++
Ув. дамы и госопода просьба к вам которые знают и могут помочь в задачках. Хотелось бы чтоб все были сделаны, но по возможности сколько...

Очень просто - C++
Я понимаю что создавалось много тем с этой проблемой но я не нашел их Просто напишите пожалуста как можно считать количество элементов...

просто вопрос=) - C++
привет всем! кто знает если сюда задачу написать за сколько минут тут могут задачу решить? скоро зачеты хотел узнать((((

вроде все просто - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;ctime&gt; using namespace std; int main() { int mas, a; srand...


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

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

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