Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 26.01.2015
Сообщений: 1
1

Вывести p-ое сочетание из n по k (гарантируется, что оно существует)

26.01.2015, 13:02. Показов 1085. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача: Вводится n,k,p. Нужно вывести p-ое сочетание из n по k, причем гарантируется, что это сочетание существует.
Сочетания номеруются с 0.
Ограничения: 1<=n<=32; 0<=k<=n;
1 секунда, 256 мб

Т к простой перебор не заходит, я написал вот такой код, который выдает неверный ответ на паре тестов, в алгоритме ни я ни мои знакомые ошибки не видят. Возможно это какая-то специфическая ошибка для С++. Заранее спасибо.

Вот сам код:
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 <iostream>
    #include <fstream>
     
    using namespace std;
     
    int mas[40];
     
    long long C(int n,int k)
    {
        if ((n==k) || (k==0)) {
            return 1;
        }
        if (k==1) {
            return n;
        }
        return C(n-1,k)+C(n-1,k-1);
    }
     
    int main()
    {
        ifstream cin;
        ofstream cout;
        cin.open("comb.in");
        cout.open("comb.out");
        long long n,k,p,c,t,last=0;
        cin >> n >> k >> p;
        for (int i=1; i<=k; i++) {
            c=C(n-i,k-i);
            t=0;
            while (p>=c) {
                t++;
                p-=c;
                c=C(n-t-i,k-i);
            }
            cout << t+1+last << ' ';
            last+=t+1;
        }
        return 0;
    }
http://pastebin.com/BkYw3XRu
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.01.2015, 13:02
Ответы с готовыми решениями:

Гарантируется ли что argv[1] == 0 при argc == 1 в функции main
Может быть глупый вопрос, но всё же: Гарантируется ли что argv == 0 при argc == 1 в функции...

Ввести двухбуквенное сочетание. Подсчитать сколько раз оно в строке
Ввести двухбуквенное сочетание. Подсчитать сколько раз оно в строке. и алгоритм нужен.

найти решение уравнения ax+b=0, если оно существует
найти решение уравнения ax+b=0, если оно существует

Удаление поля из таблицы, если оно существует
Доброго времени суток! Мне нужно удалить из таблицы поле (столбец) через запрос SQL в VBA, если...

0
26.01.2015, 13:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.01.2015, 13:02
Помогаю со студенческими работами здесь

Отпечатать первое слово третьей строки файла, если оно существует
1.Создать текстовый файл в программе объявлен как символьный (file of char). Слова в строках файла...

Отпечатать первое слово третьей строки файла, если оно существует
Создать текстовый файл в программе объявлен как символьный (file of char). Слова в строках файла...

Как задать условие командой, пока объект существует, продолжать действие, иначе - вывести что-либо?
Как задать условие командой, пока объект существует, продолжать действие, иначе - вывести что-либо?

Найти указанный элемент и его номер, или вывести сообщение, что элемента с таким свойством не существует
Написать программу на языке Delphi. Заполнить ListBox случайными числами. Найти указанный элемент и...

Заполнить ListBox случайными числами. Найти указанный элемент и его номер, или вывести сообщение, что элемента с таким свойством не существует.
Заполнить ListBox случайными числами. Найти указанный элемент и его номер, или вывести сообщение,...

Придумайте алгоритм, вводящий три целых числа, который находит второе по величине число, если оно существует
Придумайте алгоритм, вводящий три целых числа, который находит второе по величине число, если оно...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru