ในปัญหานี้ เราจะได้รับตัวแปร 3 ตัว คือ 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 และทำ recursive call ไปยังองค์ประกอบที่ตำแหน่งติดต่อกัน วนลูปจาก 0 ถึง k-1 และบวกเข้ากับตัวเลข และทำในด้านลบเช่นกัน
โปรแกรมตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
void printConsicutiveNumbers(vector<int>& 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;
}
ผลลัพธ์
The sequence is -
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