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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.94
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
#1

Есть ли какая-нибудь возможность рандомизировать процесс перемешивания элементов контейнера - C++

16.07.2012, 11:26. Просмотров 2268. Ответов 9
Метки нет (Все метки)

Есть в библиотеке алгоритмов такой алгоритм, который случайным образом перемешивает элементы данного контейнера.
Все бы хорошо, но вот только в том, что он всегда перемешивает их одним и тем же образом.
Есть ли какая-нибудь возможность рандомизировать этот процесс?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2012, 11:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Есть ли какая-нибудь возможность рандомизировать процесс перемешивания элементов контейнера (C++):

Есть какая нибудь информация по созданию алгоритма или программы для автопилота - C++
Есть какая нибудь информация по созданию алгоритма или программы для автопилота,интернет облазил,ничего не нашёл.

Есть ли в Visual Studio какая-нибудь возможность прервать программу и продолжить выполнение пошагово? - Visual Studio
Мне на работе нужно исправить в большом и объемном программном комплексе одну небольшую проблему. Беда вся в том, что где находится код,...

Есть ли в WCF какая-нибудь возможность проверить правильность установки соединения от клиента к службе? - C# WCF
Есть некая компания, предоставляющая некую службу. С помощью wsdl, также предоставленной этой некой компанией, были сгенерированы...

Есть ли какая нибудь команда или программа, которая замедляет процесс в командной строке? - Windows 7
Есть ли какая нибудь команда или программа, которая замедляет процесс в командной строке? Например хочу увидеть детально, что в командной...

Есть ли возможность как-нибудь восстановить утраченный раздел - Windows 7
помогите пожалуйста. Тупая ситуация, не буду в подробности вдаваться... При переустановки винды, удалили форматировали диск Д вместо С....

Есть ли какая-нибудь выгода в наследовании интерфейсов - C#
Есть ли какая-нибудь выгода в наследовании интерфейсов (имеется в виду когда один интерфейс наследуется от другого)? Короче в чем тут...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
16.07.2012, 11:32 #2
http://en.cppreference.com/w/cpp/alg...random_shuffle
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
16.07.2012, 11:51 #3
Цитата Сообщение от ramybozy Посмотреть сообщение
Есть в библиотеке алгоритмов такой алгоритм, который случайным образом перемешивает элементы данного контейнера.
Все бы хорошо, но вот только в том, что он всегда перемешивает их одним и тем же образом.
Есть ли какая-нибудь возможность рандомизировать этот процесс?
Не понял. Имеешь ввиду, что, если на входе 1 2 3 4 5, то ты всегда получаешь, допустим, 3 2 5 4 1?
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
16.07.2012, 12:43  [ТС] #4
Цитата Сообщение от nexen Посмотреть сообщение
Не понял. Имеешь ввиду, что, если на входе 1 2 3 4 5, то ты всегда получаешь, допустим, 3 2 5 4 1?
Да именно это я и имел в виду.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
16.07.2012, 12:46 #5
Цитата Сообщение от ramybozy Посмотреть сообщение
Да именно это я и имел в виду.
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
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <vector>
#include <math.h>
#include <algorithm>
#include <string.h>
#include <ctime>
#include <stdlib.h>
#include <locale.h>
#include <windows.h>
 
using namespace std;
//
void main()
{
    setlocale(0,"RUS");
    int mas[10];
    for (int i=0; i<5; ++i)
    {
        for (int j=0; j<10; ++j)
            mas[j] = j+1;
        random_shuffle(mas, mas+10);
        for (int j=0; j<10; ++j)
            printf("%d ", mas[j]);
        printf("\n");
    }
}
У меня каждый раз разные выдает
Попробуй у себя? (Не обращай внимание на библиотеки, у меня паттерн кода)
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
16.07.2012, 13:10  [ТС] #6
Да он то и будет выдавать ПОСЛЕДОВАТЕЛЬНО разные.
Но ты сам у себя проверь и убедись, что на 2-м, 3-м и так далее запуске у тебя генерируются точно такие же последовательности, что и на первом.
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
16.07.2012, 13:32 #7
Вы переходили по ссылке выше? Там же ясно написано, что перегрузка с двумя параметрами использует функцию std::rand(). Перед перемешиванием напишите
C++
1
std::srand( std::time( 0 ));
std::srand() - <cstdlib>
std::time() - <ctime>
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
16.07.2012, 13:46  [ТС] #8
Цитата Сообщение от Toshkarik Посмотреть сообщение
Вы переходили по ссылке выше? Там же ясно написано, что перегрузка с двумя параметрами использует функцию std::rand(). Перед перемешиванием напишите
Нет, ну эта метода известна.
Тогда не стоит рыпаться с random_shuffle, а просто использовать функции rand и srand.
Речь идет именно о том, чтобы делать это средствами библиотеки шаблонов.
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
16.07.2012, 13:55 #9
ramybozy, используйте std::shuffle + std::mt19937. Код по ссылке.
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
04.09.2014, 15:33 #10
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
int random(int min, int max)
{
    static bool flag;
    if (!flag)
    {
        srand(time(NULL));
        flag = true;
    }
    return min + rand() % (max - min);
}
 
template <typename T>
T* shuffle(T* dest, const T* source, const size_t size)
{
    memcpy(dest, source, size);
    for (int i = 0; i < size; i++)
    {
        int index = random(0,size-1);
        T tmp = dest[index];
        dest[index] = dest[i];
        dest[i] = tmp;
    }
    return dest;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.09.2014, 15:33
Привет! Вот еще темы с ответами:

Есть ли какая-нибудь база для авто - 1С
Здравствуйте, помогите найти или существует ли база для автомобилей (марка и их модели) на подобие КЛАДРа?

Есть ли на Java какая-нибудь IDE с нормальным запуском? - JAVA IDE
Начинаю изучать жаву, второй день матерюсь, когда дело доходит до запуска. Есть ли на жаву какая нибудь IDE с нормальным запуском? Или я...

Есть ли какая нибудь лайт версия Visual Studio? - C#
собственно, тока я имею ввиду не Экспресс версию, а действительно лайт, чтобы на работе поставить... чтобы можно было писать в свободное...

Есть ли какая нибудь стандартная функция по работе с датой - C (СИ)
Есть ли какая нибудь стандартная функция по работе с датой с Си? У меня задача, при решении я из файла дергаю строку вида имя, срок...


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

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

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