OmegaUP: Problema 10727 - Posicion Fibonacci

Descripción Del Problema

Como ya sabemos la sucesión de fibonacci esta compuesta por los números: 1, 1, 2, 3, 5, 8, 13, 21, 34. . . Sabiendo esto tu tarea es dado un numero N debes encontrar la posición que ocupa en la sucesión de fibonacci.

Datos de Entrada

Un numero N solamente

Datos de Salida

Un único entero que indique en que posición se encuentra el numero en la sucesión. Si el numero no se encuentra en la sucesión imprimir un -1

Código

Este Código esta escrito en lenguaje C++ con el Estandar 2017 y debe ser compilado usando el compilador "cpp17-gcc"

#include <iostream>
#include <string>

using namespace std;

size_t getPositionInFibonacciSecuence(unsigned long number)
{
    // Los primeros dos numeros de la sucesion de fibonacci.
    unsigned long n1 = 0, n2 = 1, tmp;

    // Si es cero retornamos la secuencia vacia
    if (number == 0)
    {
        return 0;   // Position 0 (firts number)
    }
    if (number == 1)
    {
        return 1;   // Position 1 (second number)
    }

    size_t position = 1; // Position nth number

    while (n2 <= number)
    {
        if (n2 == number)
        {
            return position;
        }
        position++; // update de position in the secuence

        // actualizamos las variables para la siguiente itineracion
        tmp = n1;
        n1 = n2;
        n2 = tmp + n2;
    }

    return string::npos;
}

int main() {
    std::cin.tie(nullptr);
    std::ios_base::sync_with_stdio(false);

    // TODO: fixme.
    unsigned long n;

    cin >> n;
    size_t posicion = getPositionInFibonacciSecuence(n);

    if(posicion != string::npos)
    {
        cout << posicion;
    }
    else
    {
        cout << "-1";
    }
    return 0;
}

Referencias

https://omegaup.com/arena/problem/Posicion-Fibonacci/#problems

Comentarios