📜  打印所有以n开头的序列,并将连续差限制为k

📅  最后修改于: 2021-04-23 19:50:06             🧑  作者: Mango

给定三个正整数n,sk 。任务是打印所有可能的长度为s的序列,从n开始并且连续元素之间的绝对差小于k。

例子 :

Input : n = 5, s = 3, k = 2
Output :
5 5 5 
5 5 6 
5 5 4 
5 6 6 
5 6 7 
5 6 5 
5 4 4 
5 4 5 
5 4 3 

Input : n = 3, s = 2, k = 1
Output :
3 3 

观察到,要使连续元素之间的绝对差小于k,我们可以将其从0增加到k –1。类似地,我们可以将下一个元素从1减少到k – 1。
现在,要形成所需的序列,我们首先将“ n”推入向量。然后尝试通过递归调用序列中的每个元素来填充序列中的其他元素。在每个递归调用中,我们运行从0到k – 1的循环,并将(n + i)添加到序列中。一旦我们创建了大小为s的序列,我们将打印整个序列并返回到递归调用函数并删除(n + i)。
同样,我们可以从1到k – 1循环运行,然后将(n – i)插入下一个元素位置。
要检查所需的剩余元素数,我们将传递大小– 1进行递归调用,当大小变为0时,我们将打印整个序列。

以下是此方法的实现:

C++
// CPP Program all sequence of length s 
// starting with n such that difference 
// between consecutive element is less than k.
#include 
using namespace std;
  
// Recursive function to print all sequence 
// of length s starting with n such that 
// difference between consecutive element 
// is less than k.
void printSequence(vector& v, int n,
                               int s, int k)
{
    // If size become 0, print the sequence.
    if (s == 0) {
        for (int i = 0; i < v.size(); i++)
            cout << v[i] << " ";
        cout << endl;
        return;
    }
  
    // Increment the next element and make 
    // recursive call after inserting the 
    // (n + i) to the sequence.
    for (int i = 0; i < k; i++) {
        v.push_back(n + i);
        printSequence(v, n + i, s - 1, k);
        v.pop_back();
    }
  
    // Decrementing the next element and'
    // make recursive call after inserting 
    // the (n - i) to the sequence.
    for (int i = 1; i < k; i++) {
        v.push_back(n - i);
        printSequence(v, n - i, s - 1, k);
        v.pop_back();
    }
}
  
// Wrapper Function
void wrapper(int n, int s, int k)
{
    vector v;
    v.push_back(n);
    printSequence(v, n, s - 1, k);
}
  
// Driven Program
int main()
{
    int n = 5, s = 3, k = 2;
    wrapper(n, s, k);
    return 0;
}


Java
// Java Program all sequence of length s 
// starting with n such that difference 
// between consecutive element is less than k.
import java.io.*;
import java.util.*;
  
public class GFG {
   
    static List v = new ArrayList();
    // Recursive function to print all sequence 
    // of length s starting with n such that 
    // difference between consecutive element 
    // is less than k.
    static void printSequence(int n,
                                   int s, int k)
    {
        // If size become 0, print the sequence.
        if (s == 0) {
            for (int i = 0; i < v.size(); i++)
                System.out.print(v.get(i) + " ");
            System.out.println();
            return;
        }
        
        // Increment the next element and make 
        // recursive call after inserting the 
        // (n + i) to the sequence.
        for (int i = 0; i < k; i++) {
            v.add(n + i);
            printSequence(n + i, s - 1, k);
            v.remove(v.size() - 1);
        }
        
        // Decrementing the next element and'
        // make recursive call after inserting 
        // the (n - i) to the sequence.
        for (int i = 1; i < k; i++) {
            v.add(n - i);
            printSequence(n - i, s - 1, k);
            v.remove(v.size() - 1);
        }
    }
        
    // Wrapper Function
    static void wrapper(int n, int s, int k)
    {
        v.add(n);
        printSequence(n, s - 1, k);
    }
        
    // Driven Program
    public static void main(String args[])
    {
        int n = 5, s = 3, k = 2;
        wrapper(n, s, k);
    }
}
   
// This code is contributed by Manish Shaw
// (manishshaw1)


Python3
# Python3 Program all sequence of length s 
# starting with n such that difference 
# between consecutive element is less than k.
  
# Recursive function to print all sequence 
# of length s starting with n such that 
# difference between consecutive element 
# is less than k.
def printSequence(v, n, s, k):
  
    # If size become 0, print the sequence.
    if (s == 0) :
        for i in range(0, len(v)):
            print ("{} ".format(v[i]), end="")
        print ("")
        return;
      
  
    # Increment the next element and make 
    # recursive call after inserting the 
    # (n + i) to the sequence.
    for i in range(0,k):
        v.append(n + i)
        printSequence(v, n + i, s - 1, k)
        v.pop()
      
  
    # Decrementing the next element and'
    # make recursive call after inserting 
    # the (n - i) to the sequence.
    for i in range(1,k):
        v.append(n - i)
        printSequence(v, n - i, s - 1, k)
        v.pop()
      
  
  
# Wrapper Function
def wrapper(n, s, k):
    v = []
    v.append(n)
    printSequence(v, n, s - 1, k)
  
# Driven Program
n = 5; s = 3; k = 2;
wrapper(n, s, k);
  
# This code is contributed by 
# Manish Shaw(manishshaw1)


C#
// C# Program all sequence of length s 
// starting with n such that difference 
// between consecutive element is less than k.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Collections;
  
class GFG {
  
    // Recursive function to print all sequence 
    // of length s starting with n such that 
    // difference between consecutive element 
    // is less than k.
    static void printSequence(ref List v, int n,
                                   int s, int k)
    {
        // If size become 0, print the sequence.
        if (s == 0) {
            for (int i = 0; i < v.Count; i++)
                Console.Write(v[i] + " ");
            Console.WriteLine();
            return;
        }
       
        // Increment the next element and make 
        // recursive call after inserting the 
        // (n + i) to the sequence.
        for (int i = 0; i < k; i++) {
            v.Add(n + i);
            printSequence(ref v, n + i, s - 1, k);
            v.RemoveAt(v.Count - 1);
        }
       
        // Decrementing the next element and'
        // make recursive call after inserting 
        // the (n - i) to the sequence.
        for (int i = 1; i < k; i++) {
            v.Add(n - i);
            printSequence(ref v, n - i, s - 1, k);
            v.RemoveAt(v.Count - 1);
        }
    }
       
    // Wrapper Function
    static void wrapper(int n, int s, int k)
    {
        List v = new List();
        v.Add(n);
        printSequence(ref v, n, s - 1, k);
    }
       
    // Driven Program
    public static void Main()
    {
        int n = 5, s = 3, k = 2;
        wrapper(n, s, k);
    }
}
  
// This code is contributed by Manish Shaw
// (manishshaw1)


PHP


输出 :

5 5 5 
5 5 6 
5 5 4 
5 6 6 
5 6 7 
5 6 5 
5 4 4 
5 4 5 
5 4 3