Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
1 / 5 / 0
Регистрация: 16.10.2017
Сообщений: 170
1

Рекурсия: определите подмножество данных чисел, дающих сумму меньше, чем Z и с количеством членов большим чем K

30.01.2018, 17:19. Показов 806. Ответов 5
Метки нет (Все метки)

имеется n различных натуральных чисел. определите подмножество данных чисел, дающих сумму меньше, чем заданное число z и с количеством членов(в сумме) больше, чем заданное число к. гарантируется, что такое подмножество одно. числа перечислять в том порядке, в котором они находятся в исходном множестве.
вот код:
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
int n;
int z;
int s;
int k;
int a[20];
char f[20];
void printrez() {
    int i;
    for (i = 1; i <= n; i++)
        if (f[i] == '+') cout<< a[i];
}
void poisk(int r) {
    int i;
    int e = 0;
    s = s + a[r];
    e++;
    f[r] = '+';
    if ((s < z) && (e > k)) printrez();
    else if (s > z)
        for(i=r+1; i<=n; i++)
        poisk(i);
    s = s - a[r];
    e--;
    f[r] = ' ';
}
int main()
{
    
    cin>> n >> k >> z;
    int j;
    for (j = 1; j <= n; j++)
        pt >> a[j];
    for (j = 1; j <= n; j++)
        poisk(j);
 
}
почему не работает?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.01.2018, 17:19
Ответы с готовыми решениями:

Найти элемент в массиве реальных чисел и его номер среди чисел, больше чем 7.8 и меньше чем 50.2
Найти элемент массиву реальных (дійсних) чисел (12.37, 2.43, 16.55, 0.81, 0.32, 1.345, -12.18,...

Найти элемент в массиве реальных чисел и его номер среди чисел, больше чем 7.8 и меньше чем 50.2
Найти элемент массиву реальных (дійсних) чисел (12.37, 2.43, 16.55, 0.81, 0.32, 1.345, -12.18,...

Массив заполняется количеством элементов, большим, чем положено
Объясните, почему память ведь выделена статически, но заполняются больше элементов/печатается всё...

Вычислить сумму и количество отрицательных элементов массива, которые больше чем b и меньше чем a
Требуется помощь в написании программы по обработке одномерного массива в Delphi. Условие:...

5
184 / 192 / 48
Регистрация: 25.08.2011
Сообщений: 792
30.01.2018, 17:40 2
отредактируйте выравнивание у меня сейча глаза повыпадают))
0
13 / 13 / 5
Регистрация: 18.06.2017
Сообщений: 31
30.01.2018, 20:28 3
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
#include <vector>
#include <iostream>
 
using namespace std;
 
bool search(const vector<int>& set, int z, int k, vector<int>& out, int i = 0, int s = 0) {
    while (i < set.size()) {
        if (s + set[i] < z) {
            out.push_back(set[i]);
            if (out.size() > k) {
                return true;
            }
            else if (search(set, z, k, out, i + 1, s + set[i])) {
                return true;
            }
            out.pop_back();
        }
        ++i;
    }
    return false;
}
 
int main() {
    int n; cin >> n;
 
    vector<int> set(n);
    for (int i = 0; i < n; ++i) {
        cin >> set[i];
    }
 
    int z; cin >> z;
    int k; cin >> k;
 
    vector<int> out; out.reserve(set.size());
 
    search(set, z, k, out);
 
    for (int i = 0; i < out.size(); ++i) {
        cout << out[i] << ' ';
    }
}
0
1 / 5 / 0
Регистрация: 16.10.2017
Сообщений: 170
31.01.2018, 14:40  [ТС] 4
kmqrce, отлично, но мне рекурсия нужна в функции поиска, помогите эту функцию написать

Добавлено через 26 минут
kmqrce, Вы можете исправить мою функцию?

Добавлено через 15 минут
kmqrce, пожалуйста

Добавлено через 4 часа 12 минут
help, please
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31466 / 20513 / 7988
Регистрация: 22.10.2011
Сообщений: 35,637
Записей в блоге: 7
31.01.2018, 14:43 5
Цитата Сообщение от lukinyx99 Посмотреть сообщение
но мне рекурсия нужна в функции поиска
А в 13 строке что, нет рекурсивного вызова search?
0
1 / 5 / 0
Регистрация: 16.10.2017
Сообщений: 170
31.01.2018, 16:54  [ТС] 6
volvo, поняла уже, что есть
но мне надо полегче решение, без функций вектора и т.д.
помогите исправить мою функцию, пожалуйста

Добавлено через 2 часа 6 минут
что не так с моей функцией???
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.01.2018, 16:54

Сколько существует подмножеств данных чисел, дающих в сумме значение меньше z?
помогите решить задачу имеется n различных натуральных чисел. определите, сколько существует...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru