Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

พิมพ์ลำดับทั้งหมดที่ขึ้นต้นด้วย n และผลต่างที่ต่อเนื่องกันจำกัดที่ k ใน C++


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