Писькин Васькин
Знаток
(426)
1 месяц назад
Для решения задачи по генерации всех убывающих последовательностей длины K из чисел от 1 до N в лексикографическом порядке на языке C++, мы можем использовать рекурсивный подход.
Вот пример реализации:
#include <iostream>
#include <vector>
void generateSequences(int N, int K, int start, std::vector<int>& current) {
if (current.size() == K) {
// Если достигли нужной длины K, выводим последовательность
for (int num : current) {
std::cout << num << " ";
}
std::cout << std::endl;
return;
}
// Начинаем с текущего значения и идем вниз
for (int i = start; i >= 1; --i) {
current.push_back(i); // Добавляем текущее число в последовательность
generateSequences(N, K, i - 1, current); // Рекурсивный вызов с уменьшением числа
current.pop_back(); // Убираем последнее добавленное число для следующей итерации
}
}
int main() {
int N, K;
std::cout << "Введите N и K: ";
std::cin >> N >> K;
std::vector<int> current; // Вектор для хранения текущей последовательности
generateSequences(N, K, N, current); // Запускаем генерацию
return 0;
}
▎Объяснение кода:
1. Функция generateSequences:
• Принимает параметры N, K, start (начальное значение для генерации) и current (вектор для хранения текущей последовательности).
• Если длина текущей последовательности равна K, она выводит эту последовательность.
• В цикле от start до 1 добавляет числа в текущую последовательность и вызывает себя рекурсивно, уменьшая start.
2. В функции main:
• Пользователь вводит значения N и K.
• Вызывается функция generateSequences для начала генерации последовательностей.
▎Пример использования:
Если ввести N = 5 и K = 3, программа выведет все возможные убывающие последовательности длиной 3 из чисел от 1 до 5 в лексикографическом порядке:
5 4 3
5 4 2
5 4 1
5 3 2
5 3 1
5 2 1
4 3 2
4 3 1
4 2 1
3 2 1
Этот код должен работать корректно для всех допустимых значений N и K.
leyla nuriyevaУченик (75)
1 месяц назад
Спасибо но первый тест не проходит
Входные данные
5 2
Результат работы
2 1
3 1
3 2
4 1
4 2
4 3
5 1
5 2
5 3
5 4