ในปัญหานี้ เราได้รับตัวแปรสามตัว 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