在 C++ 中列印所有以 n 開始且連續差限於 k 的序列


本例程給定三個變數 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

更新日期:2020 年 1 月 17 日

83 次瀏覽

開啟職業生涯

完成課程,獲得認證

開始
廣告
© . All rights reserved.