Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

ПОМОГИТЕ ПРОШУ С++

leyla nuriyeva Ученик (75), на голосовании 2 дня назад
По данным числам N и K выведите все убывающие последовательности длины K из чисел 1 . . . N в лексикографическом порядке.
Входные данные

5 2
Результат работы

2 1
3 1
3 2
4 1
4 2
4 3
5 1
5 2
5 3
5 4
Голосование за лучший ответ
resurce Гуру (4210) 1 месяц назад
 #include <iostream> 
#include <vector>

void generateSequences(int n, int k, std::vector<int>& currentSequence, int currentNumber) {
if (currentSequence.size() == k) {
for (int num : currentSequence) {
std::cout << num << " ";
}
std::cout << std::endl;
return;
}

for (int i = currentNumber - 1; i >= 1; --i) {
if (currentSequence.empty() || i < currentSequence.back()) {
currentSequence.push_back(i);
generateSequences(n, k, currentSequence, i);
currentSequence.pop_back();
}
}
}

int main() {
int n, k;
std::cin >> n >> k;

std::vector<int> currentSequence;
generateSequences(n, k, currentSequence, n + 1);

return 0;
}
leyla nuriyevaУченик (75) 1 месяц назад
в 1 -ом тесте в обратном порядке , можете исправить пожалуйста
resurce Гуру (4210)
 int main() { 
    int n, k; 
    std::cin >> n >> k; 
 
    std::vector<int> currentSequence; 
    generateSequences(n, k, currentSequence, n); // Исправлено здесь 
 
    return 0; 
} 
leyla nuriyevaУченик (75) 1 месяц назад
все равно неправильно((
resurce Гуру (4210) leyla nuriyeva, Тогда понятия не имею
Андрей Высший разум (460615) 1 месяц назад
В тексте задачи неоднозначно выглядит "в лексикографическом порядке". Для строк символов это понятно. А для наборов чисел разделённых пробелами? Ведь "в лексикографическом порядке" строка "25 9" будет меньше, чем строка "3 1".

Если же принять всё же числовой порядок для чисел, стоящих на одной позиции, то:
 #include <iostream>
#include <vector>

using namespace std;

void f(vector<int> &t, int n, int pos = 0) {
if (pos >= t.size()) {
for (auto v: t) { cout << v << ' '; }
cout << '\n';
return;
}

for (t[pos] = t.size() - pos; t[pos] <= n; ++t[pos]) {
f(t, t[pos] - 1, pos + 1);
}
}

int main() {
int n, k;
cin >> n >> k;
vector<int> t(k);
f(t, n);
}
leyla nuriyevaУченик (75) 1 месяц назад
спасибо огромное
Похожие вопросы