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

Генератор чисел - C++

Восстановить пароль Регистрация
 
DJZT
 Аватар для DJZT
24 / 3 / 0
Регистрация: 21.12.2011
Сообщений: 151
21.01.2012, 12:19     Генератор чисел #1
Здравствуйте. пишу вот такую программу. Генерирует случайные числа. Но каждый раз исключая повторы. помогите. не пойму в чём дело. выводить постоянно повторы!
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 "StdAfx.h"
#include "conio.h"
#include <cstdlib>
using std::srand;
using std::rand;
#include <time.h>
 
 
 
int main(){
 srand(time(0)); // Инициализируем генератор текущим временем.
 int mas_r[16]; //массив исключений
    int i=0;
    m1:
    int rand_1 = rand()%16; // Случайное число в пределах от 0 включительно до 16 исключительно.
    rand_1++;
    for(int d=0;d<=15;d++) // проверка на повтор
    {
        if (rand_1 == mas_r[i])
        {
            goto m1;
            
        }
        else
        {
            printf("%i%2 |",rand_1); // вывод
            mas_r[i]=rand_1;
            i++;
        }
    }
 getch();
}
Добавлено через 2 минуты
Алгоритм таков, что если при проверке на на повтор в массиве попадается такое же число, то число рандомится заново.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.01.2012, 12:19     Генератор чисел
Посмотрите здесь:

генератор чисел C++
C++ Генератор случайных чисел
C++ Генератор чисел
Генератор чисел C++
C++ Рандомный генератор чисел
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
21.01.2012, 12:21     Генератор чисел #2
Сгенерировал число - если такого числа нет в массиве чисел, то используй его и добавляй его в массив чисел. Иначе генерируй еще раз. Как видите алгоритм простой.
DJZT
 Аватар для DJZT
24 / 3 / 0
Регистрация: 21.12.2011
Сообщений: 151
21.01.2012, 12:23  [ТС]     Генератор чисел #3
Собственно код так и написан, но не работает. Он тупо выводит 16 одинаковых чисел подряд.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
21.01.2012, 12:33     Генератор чисел #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 <cstdlib>
#include <ctime>
#include <vector>
#include <algorithm>
 
int main()
{
   std::vector<int> v;
   int t;
   srand (time(NULL));
   while ( v.size() != 16 )
   {
      t = rand() % 16;
      if ( std::find(v.begin(), v.end(), t ) == v.end() )
      {
         std::cout << t << std::endl;
         v.push_back(t);
      }
   }      
   return 0;
}
http://liveworkspace.org/code/f8a790...98ee414baed296
16 случайных чисел от 0 до 15 без повторов.
Код
14
12
3
10
8
2
15
6
13
11
7
1
9
4
0
5
DJZT
 Аватар для DJZT
24 / 3 / 0
Регистрация: 21.12.2011
Сообщений: 151
21.01.2012, 12:56  [ТС]     Генератор чисел #5
спасибо. Благодарен.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
21.01.2012, 13:16     Генератор чисел #6
.....
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
21.01.2012, 13:25     Генератор чисел #7
На сколько знаю такие алгоритмы могут столкнуться с проблемой бесконечной отсрочки. Но, скорей всего, по другому данную задачу не решить.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
21.01.2012, 13:33     Генератор чисел #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <algorithm>
#include <cstddef>
#include <cstdlib>
#include <ctime>
 
int main()
{
    const size_t n = 16;
    int mas_r[n] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
 
    std::srand(std::time(0));
    std::random_shuffle(mas_r, mas_r + n);
 
    for(size_t i = 0; i < n; ++i)
        std::cout << mas_r[i] << ' ';
    std::cout << std::endl;
}
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
21.01.2012, 13:45     Генератор чисел #9

Не по теме:

rangerx, жестко



Добавлено через 3 минуты
А какого ограничение диапазона чисел? Если его нет или оно достаточно большое то можно просто на каждое следующее число увеличивать смещение диапазона случайного числа, скажем, на 5.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2012, 13:55     Генератор чисел
Еще ссылки по теме:

C++ Генератор случайных чисел
Генератор чисел! C++
Генератор простых чисел C++

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

Или воспользуйтесь поиском по форуму:
DJZT
 Аватар для DJZT
24 / 3 / 0
Регистрация: 21.12.2011
Сообщений: 151
21.01.2012, 13:55  [ТС]     Генератор чисел #10
спасибо. уже написал. Мне нужна была программа для распределения турнирной сетки команд.
Yandex
Объявления
21.01.2012, 13:55     Генератор чисел
Ответ Создать тему
Опции темы

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