在这个问题上,我们给了两个整数K和n。我们的任务是使用前n个自然数打印所有长度为K的递增序列。
递增序列是一个数字序列,其中下一个元素的值大于前一个元素的值。
让我们以一个例子来了解问题-
Input: n = 4, K = 2 Output: 1 2 1 3 1 4 2 3 2 4 3 4
为了解决这个问题,我们将创建一个ak length数组来存储数组的当前序列。对于数组中的每个位置,我们将检查前一个元素并选择大于上一个元素的下一个元素。我们将一一尝试将所有值固定为1到n。
程序来说明上述逻辑-
#include<iostream>
using namespace std;
void printSequence(int arr[], int k) {
for (int i=0; i<k; i++)
cout<<arr[i]<<" ";
cout<<endl;
}
void printKLengthSequence(int n, int k, int &len, int arr[]) {
if (len == k) {
printSequence(arr, k);
return;
}
int i = (len == 0)? 1 : arr[len-1] + 1;
len++;
while (i<=n) {
arr[len-1] = i;
printKLengthSequence(n, k, len, arr);
i++;
}
len--;
}
void generateSequence(int n, int k) {
int arr[k];
int len = 0;
printKLengthSequence(n, k, len, arr);
}
int main() {
int k = 3, n = 4;
cout<<"Sequence of length "<<k<<" generated using first "<<n<<" natural numbers :\n";
generateSequence(n, k);
return 0;
}输出结果
A sequence of length 3 generated using first 4 natural numbers − 1 2 3 1 2 4 1 3 4 2 3 4