给定三个正整数n,s和k 。任务是打印所有可能的长度为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