Computer >> Máy Tính >  >> Lập trình >> C ++

In tất cả các chuỗi bắt đầu bằng n và hiệu số liên tiếp được giới hạn ở k trong C ++


Trong bài toán này, chúng ta có ba biến n, s và k và chúng ta phải in ra tất cả các dãy có thể bắt đầu bằng số n và độ dài s có hiệu số tuyệt đối giữa các biến liên tiếp phần tử nhỏ hơn k.

Hãy lấy một ví dụ để hiểu rõ hơn về chủ đề -

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

Trong bài toán này, chúng ta cần có được sự khác biệt tuyệt đối nhỏ hơn k. Đối với điều này, chúng ta có thể nhận được một chuỗi có các phần tử lớn hơn để nhận được chênh lệch dương và nhỏ hơn để nhận được chênh lệch âm.

Đối với điều này, chúng tôi sẽ bắt đầu với n và thực hiện một cuộc gọi đệ quy đến các phần tử ở mỗi vị trí liên tiếp. Một vòng lặp từ 0 đến k-1 và thêm nó vào số thành số. Tương tự với mặt tiêu cực cũng vậy.

Ví dụ

#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;
}

Đầu ra

Trình tự là -

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