# PBinfo #2969 – cautafibo – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: deivid

## Enunț

Cerința
Se citesc pe rând numere naturale nenule. Să se determine câte din numerele citite sunt termeni ai șirului lui Fibonacci.

Date de intrare
Fișierul de intrare cautafibo.in conține numere naturale nenule, separate prin spații.

Date de ieșire
Fișierul de ieșire cautafibo.out va conține o singură valoare, reprezentând numărul termenilor Fibonacci care se regăsesc în fișierul de intrare.

Restricții și precizări

numerele din fișierul de intrare vor avea cel mult 10 cifre
fișierul de intrare va conține cel mult 100.000 de numere naturale nenule

Exemplu:
cautafibo.in


5 10 89 1 7 9 8 1 6 55 19 13 55
cautafibo.out

8
Explicație
Numerele Fibonacci din fișierul de intrare sunt: 5 89 1 8 1 55 13 55

## Cod sursă C++

```cpp
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautafibo.in");
ofstream fout("cautafibo.out");
long long f[47], x, i, k, OK, li, ls, m;
int main()
{
    f[1] = 1;
    f[2] = 2;
    for (i = 3; i <= 46; i++)
        f[i] = f[i - 1] + f[i - 2];
    k = 0;
    while (fin >> x)
    {
        li = 1;
        ls = 46;
        OK = 0;
        while (li <= ls && !OK)
        {
            m = (li + ls) / 2;
            if (x == f[m]) OK = 1;
            else if (x < f[m]) ls = m - 1;
                    else li = m + 1;
        }
        k += OK;
    }
    fout << k;
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/2969)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/2969/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-2969/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
