Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

In tất cả dãy序列 bắt đầu bằng n, chênh lệch liên tiếp ≤ k trong C++


Cho n, s, k. In tất cả dãy序列 bắt đầu bằng n, độ dài s, chênh lệch tuyệt đối giữa các phần tử liên tiếp < k.

Ví dụ:

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

Giải pháp: Đệ quy từ n, mỗi bước thêm phần tử mới với chênh lệch từ -(k-1) đến (k-1).

Chương trình minh họa

#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 << "Dãy序列 là :\n";
    vector<int> v;
    v.push_back(n);
    printConsicutiveNumbers(v, n, s - 1, k);
    return 0;
}

Kết quả

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