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

Рекурсия: размещения из 10 по 3 элемента - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Настя_111
 Аватар для Настя_111
4 / 4 / 0
Регистрация: 12.05.2010
Сообщений: 159
14.06.2010, 22:07     Рекурсия: размещения из 10 по 3 элемента #1
Помогите Плз Плз Плз Плз Плз

Получить все размещения из 10 элементов 1, 2,..., 10 по 3 в каждом. Размещением называется выборка из п указанных элементов т неповторяющихся элементов.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2010, 22:07     Рекурсия: размещения из 10 по 3 элемента
Посмотрите здесь:

C++ Рекурсия: нахождение минимального элемента массива
C++ Рекурсия. Комбинаторика. Размещения
C++ Какая схема размещения массивов в памяти?
размещения C++
Архитектура размещения h и cpp файлов C++
C++ Рекурсия, поиск второго максимального элемента
Функция размещения переменных в динамической памяти! C++
Правила размещения объектов в памяти C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mr.X
Эксперт С++
 Аватар для Mr.X
2802 / 1578 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
15.06.2010, 06:39     Рекурсия: размещения из 10 по 3 элемента #2
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
//Получить все размещения из 10 элементов 1, 2,..., 10 по 3 в каждом. 
//Размещением называется выборка из п указанных элементов т неповторяющихся элементов. 
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
 
 
typedef std::string         T_str;
typedef int                 T_num;
typedef std::vector<T_num>  T_nums;
 
class T_generate_podrjad_from
{
    T_num  first_num_;
public:
    T_generate_podrjad_from(T_num  first_num) : first_num_(first_num)
    {}
 
    T_num operator()()
    {
        return first_num_++;
    }
};
 
T_nums  get_n_nums_podrjad_from(T_num  nums_size, T_num  begin_num)
{
    T_nums  nums(nums_size);
    std::generate(nums.begin(), nums.end(), T_generate_podrjad_from(begin_num));
    return  nums;
}
 
void print_nums(const T_nums&  nums)
{    
    std::copy(nums.begin(), nums.end(), std::ostream_iterator<T_num>(std::cout, " "));
    std::cout << "   ";  
}
 
typedef std::set<T_num> T_nums_set;
 
void  print_all_razmetch
    (
        const T_nums&  nums_nabor, 
        const T_num    last_razmetsh_ind,
        T_nums&        razmetsh
    )
{    
    for(T_nums::const_iterator  nabor_num_it = nums_nabor.begin();
        nabor_num_it != nums_nabor.end(); ++nabor_num_it)    
    { 
        if(last_razmetsh_ind > 0)
        {
            T_nums_set  razmetsh_nums_set
                (razmetsh.begin(), razmetsh.begin() + last_razmetsh_ind);
            if(razmetsh_nums_set.count(*nabor_num_it) > 0)
            {
                continue;
            }        
        }        
        
        razmetsh[last_razmetsh_ind] = *nabor_num_it;
        if(last_razmetsh_ind == razmetsh.size() - 1)
        {
            print_nums(razmetsh);
        }
        else
        {
            print_all_razmetch
                (
                    nums_nabor, 
                    last_razmetsh_ind + 1, 
                    razmetsh
                );            
        }             
    }//for(T_nums::const_iterator  nabor_num_it = nums_nabor.begin();
}
 
int main()
{
    std::locale::global(std::locale(""));
    for(;;)
    {
        std::cout << std::endl
                  << std::endl;
        T_num n;
        std::cout << "Введите размер исходного множества: ";
        std::cin >> n;
        if(n < 1) return EXIT_FAILURE;
        
        std::cout << "Введите значение первого элемента исходного множества: ";
        T_num  num_begin;
        std::cin >> num_begin;
        
        T_num  m;
        do
        {
            std::cout << "Введите размер размещения: ";
            std::cin >> m;        
        }while(m < 1 || n < m);
        //Генерируем начальный вектор.
        T_nums  nums_nabor = get_n_nums_podrjad_from(n, num_begin);
        T_nums  razmetsh(m);
        print_all_razmetch(nums_nabor, 0, razmetsh);    
    }   
    return 0;
}
Yandex
Объявления
15.06.2010, 06:39     Рекурсия: размещения из 10 по 3 элемента
Ответ Создать тему
Опции темы

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