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

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

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