Secuencia de Connell

Dado un entero ‘n’, genera los primeros términos ‘n’ de la Secuencia de Connell. 
Secuencia de Connell es la secuencia formada con el primer número impar, es decir, 1 como su primer término. Los siguientes términos de la secuencia se componen de los primeros dos números pares, es decir, 2 y 4, seguidos de los siguientes tres números impares, es decir, 5, 7 y 9, seguidos de los siguientes cuatro números pares, es decir, 10, 12, 14. y 16 y así sucesivamente…. la secuencia continúa.
Fórmula: 
 

a[n] = 2 * n - floor((1 + sqrt(8 * n - 7))/2)   ; n > 1

Ejemplos: 
 

Input : 6
Output : 1 2 4 5 7 9

Input : 12
Output : 1 2 4 5 7 9 10 12 14 16 17 19

Puede notarse aquí que escribir los términos en líneas nuevas como, primer término en primera línea, dos términos siguientes en la línea siguiente, tres términos siguientes en la línea siguiente y así sucesivamente, da un patrón interesante como: Línea 1: 1 Línea

: 2 4 
Línea 3: 5 7 9 
Línea 4: 10 12 14 16 
Línea 5: 17 19 21 23 25 
y así sucesivamente… 
El patrón es que cada último número de una línea en particular es igual a ese número de línea al cuadrado. 
Por ejemplo 
 

  1. En la línea 2, el último número es 4, que es igual a su número de línea al cuadrado, es decir, 2^2
  2. En la línea 5, el último número es 25, que es igual a su número de línea al cuadrado, es decir, 5^2

A continuación se muestra una implementación simple en la que generamos resultados agregando alternativamente un número par e impar de elementos. Usamos el tamaño de la lista actual para decidir el próximo número de elementos a enviar.
 

C++

// CPP code to generate first 'n' terms
// of Connell Sequence
#include <bits/stdc++.h>
using namespace std;
 
// Function to generate a fixed number
// of even or odd terms. The size of r
// decides whether numbers to be generated
// even or odd.
vector<long long int> gen(long long int n,
                  vector<long long int> r)
{
    long long int a = r[r.size() - 1];
    a++;
    for (int i = 1; i <= n; a += 2, i++)
        r.push_back(a);
    return r;
}
 
// Generating the first 'n' terms of
// Connell Sequence
vector<long long int> connell(long long int n)
{
    vector<long long int> res;
    long long int k = 1;
 
    // A dummy 0 is inserted at the
    // beginning for consistency
    res.push_back(0);
 
    while (1)
    {
        // Calling function gen() to generate
        // 'k' number of terms
        res = gen(k, res);
        k++;
 
        int j = res.size() - 1;
        while (j != n && j + k > n)
            k--;
 
        // Checking if 'n' terms are
        // already generated
        if (j >= n)
            break;
    }
 
    // Removing the previously inserted dummy 0
    res.erase(res.begin());
 
    return res;
}
 
// Driver Method
int main()
{
    long long int n = 10;
 
    cout << "The first " << n
         << " terms are" << endl;
    vector<long long int> res = conell(n);
    for (int i = 0; i < res.size(); i++)
        cout << res[i] << " ";
    cout << endl;
    return 0;
}

Java

// Java code to generate
// first 'n' terms
// of Connell Sequence
import java.util.*;
 
class GFG
{
     
    // Function to generate a
    // fixed number of even or
    // odd terms. The size of r
    // decides whether numbers
    // to be generated even or odd.
 
    static Vector<Long> gen(long n, Vector<Long> r)
    {    
        long a = r.get(r.size() - 1);    
        a++;    
        for (int i = 1; i <= n; a += 2, i++)
        {
            r.add(a);
        }    
        return r;    
    }
 
    // Generating the first
    // 'n' terms of
    // Connell Sequence
    static Vector<Long> connell(long n)
    {    
        Vector<Long> res = new Vector<Long>();    
        long k = 1;
 
        // A dummy 0 is inserted
        // at the beginning for
        // consistency
        res.add(0L);    
         
        while (true)
        {
            // Calling function
            // gen() to generate
            // 'k' number of terms
            res = gen(k, res);        
            k++;        
             
            int j = res.size() - 1;        
            while (j != n && j + k > n)
            {
                k--;
            }
 
            // Checking if 'n'
            // terms are already
            // generated
            if (j >= n)
            {
                break;
            }        
        }
 
        // Removing the previously
        // inserted dummy 0
        res.remove(0);    
         
        return res;    
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        long n = 10;    
         
        System.out.println("The first "
                    + n + " terms are");
                 
        Vector<Long> res = conell(n);    
        for (int i = 0; i < res.size(); i++)
        {
            System.out.print(res.get(i) + " ");
        }    
        System.out.println();    
    }
}
 
// This code has been contributed
// by Rajput-Ji

Python3

# Python3 code to generate first 'n' terms
# of Connell Sequence
 
# Function to generate a fixed number
# of even or odd terms. The size of r
# decides whether numbers to be generated
# even or odd.
def gen(n, r):
    a = r[-1]
    a += 1
    for i in range(1, n + 1):
        r.append(a)
        a += 2
    return r
 
# Generating the first 'n' terms of
# Connell Sequence
def connell(n):
    res = []
    k = 1
 
    # A dummy 0 is inserted at the
    # beginning for consistency
    res.append(0)
 
    while 1:
 
        # Calling function gen() to generate
        # 'k' number of terms
        res = gen(k, res)
        k += 1
        j = len(res) - 1
        while j != n and j + k > n:
            k -= 1
 
        # Checking if 'n' terms are
        # already generated
        if j >= n:
            break
 
    # Removing the previously inserted dummy 0
    res.remove(res[0])
    return res
 
# Driver Code
if __name__ == "__main__":
    n = 10
    print("The first %d terms are" % n)
    res = conell(n)
    for i in range(len(res)):
        print(res[i], end = " ")
    print()
 
# This code is contributed by
# sanjeev2552

C#

// C# code to generate
// first 'n' terms
// of Connell Sequence
using System;
using System.Collections.Generic;
 
class GFG
{
    // Function to generate a
    // fixed number of even or
    // odd terms. The size of r
    // decides whether numbers
    // to be generated even or odd.
    static List<long> gen(long n,
                          List<long> r)
    {
        long a = r[r.Count - 1];
        a++;
        for (int i = 1; i <= n;
                 a += 2, i++)
            r.Add(a);
        return r;
    }
     
    // Generating the first
    // 'n' terms of
    // Connell Sequence
    static List<long> connell(long n)
    {
        List<long> res = new List<long>();
        long k = 1;
     
        // A dummy 0 is inserted
        // at the beginning for
        // consistency
        res.Add(0);
     
        while (true)
        {
            // Calling function
            // gen() to generate
            // 'k' number of terms
            res = gen(k, res);
            k++;
     
            int j = res.Count - 1;
            while (j != n &&
                   j + k > n)
                k--;
     
            // Checking if 'n'
            // terms are already
            // generated
            if (j >= n)
                break;
        }
     
        // Removing the previously
        // inserted dummy 0
        res.RemoveAt(0);
     
        return res;
    }
     
    // Driver Code
    static void Main()
    {
        long n = 10;
     
        Console.WriteLine("The first " +
                      n + " terms are");
        List<long> res = conell(n);
        for (int i = 0; i < res.Count; i++)
            Console.Write(res[i] + " ");
        Console.WriteLine();
    }
}
 
// This code is contributed by
// Manish Shaw(manishshaw1)

Javascript

<script>
 
// Javascript code to generate first 'n' terms
// of Connell Sequence
 
// Function to generate a fixed number
// of even or odd terms. The size of r
// decides whether numbers to be generated
// even or odd.
function gen(n, r)
{
    var a = r[r.length - 1];
    a++;
    for (var i = 1; i <= n; a += 2, i++)
        r.push(a);
    return r;
}
 
// Generating the first 'n' terms of
// Connell Sequence
function connell(n)
{
    var res = [];
    var k = 1;
 
    // A dummy 0 is inserted at the
    // beginning for consistency
    res.push(0);
 
    while (1)
    {
        // Calling function gen() to generate
        // 'k' number of terms
        res = gen(k, res);
        k++;
 
        var j = res.length - 1;
        while (j != n && j + k > n)
            k--;
 
        // Checking if 'n' terms are
        // already generated
        if (j >= n)
            break;
    }
 
    // Removing the previously inserted dummy 0
    res.shift();
 
    return res;
}
 
// Driver Method
var n = 10;
document.write( "The first " + n
     + " terms are" + "<br>");
var res = conell(n);
for (var i = 0; i < res.length; i++)
    document.write( res[i] + " ");
 
// This code is contributed by rrrtnx.
</script>

Producción: 
 

The first 10 terms are
1 2 4 5 7 9 10 12 14 16 

Publicación traducida automáticamente

Artículo escrito por SaagnikAdhikary y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *