在这个问题中,我们给了三个变量n,s和k,我们必须打印所有可能的序列,这些序列以数字n和长度s开头,并且连续元素之间的绝对差小于k。
让我们举个例子来更好地理解这个话题-
Input: n = 3, s = 3 , k = 2 Output: 3 3 3 3 3 4 3 3 2 3 4 4 3 4 5 3 4 3 3 2 2 3 2 3 3 2 1
在这个问题上,我们需要获得绝对差减去k。为此,我们可以得到一个序列,该序列具有的元素较大,以获得正差异,而元素较小,以获得负差异。
为此,我们将从n开始,并对每个连续位置的元素进行递归调用。从0到k-1的循环,并将其添加到数字中。同样不利的一面。
#include <bits/stdc++.h>
using namespace std;
void printConsicutiveNumbers(vector& v, int n, int s, int k){
if (s == 0) {
for (int i = 0; i < v.size(); i++)
cout<<v[i]<<" ";
cout << endl;
return;
}
for (int i = 0; i < k; i++) {
v.push_back(n + i);
printConsicutiveNumbers(v, n + i, s - 1, k);
v.pop_back();
}
for (int i = 1; i < k; i++) {
v.push_back(n - i);
printConsicutiveNumbers(v, n - i, s - 1, k);
v.pop_back();
}
}
int main(){
int n = 3, s = 3, k = 2;
cout<<"The sequence is :\n";
vector<int> v;
v.push_back(n);
printConsicutiveNumbers(v, n, s - 1, k);
return 0;
}输出结果
顺序是-
3 3 3 3 3 4 3 3 2 3 4 4 3 4 5 3 4 3 3 2 2 3 2 3 3 2 1