Informatică, întrebare adresată de popandrei260, 8 ani în urmă

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
VA ROG FRUMOS DE 100 PUNCTE
//
eu fac doar 70 pct
#include
#include
using namespace std;
ifstream f("cautafibo.in");
ofstream g("cautafibo.out");
long long int x, k = 0 ;
long long int test(long long int n)
{
long long int f1, f2, f ;
f1 = 0 ;
f2 = 1 ;
while(f2 <= n)
{
if(f1 == n)
return 1 ;
if(f2 == n)
return 1 ;
f = f1 + f2 ;
if(f == n)
return 1 ;
f1 = f2;
f2 = f;
}
return 0 ;
}
int main()
{
while(f >> x)
if(test(x))
k ++ ;
g << k;
f.close() ;
g.close() ;
return 0;
}

Răspunsuri la întrebare

Răspuns de ProMinecraft69
1

Răspuns:

Explicație:

#include <iostream>

#include <fstream>

using namespace std;

ifstream f("cautafibo.in");

ofstream g("cautafibo.out");

int co;

int main()

{

 unsigned   long int n,a,x,y,z;

  while(f >> a)

       {

   x =1;

   y = 1;

   z = 2;

   while (z<a)

       {

           x = y;

   y = z;

    z = x+y;

    }

     if (z==a or a == 1 or a == 2)

          {

              co++;

          }

}

g << co;

return 0;

}


popandrei260: multumesc foarte mult
boiustef: varianta domnului ProMinecraft e de 100, am verificat-o pe pbinfo, doar că nu foloseşte căutare binară, dar nici nu se cere în enunţ, cu atât mai mult că în timp a mers la fel cu varianta căutare binară şi câştigă ân simplitate...
popandrei260: mersi te poti uita la secvbiti? ;))
Răspuns de boiustef
0

Răspuns:

#include <iostream>

#include <fstream>

using namespace std;

ifstream f("cautafibo.in");

ofstream g("cautafibo.out");

unsigned long long num, i, contor, v[51];

int div_imp (int p, int q)

{

   int mij;

   if (q<p)

       return 0;

   else

       {

           mij=(p+q)/2;

           if(v[mij]==num)

               return 1;

           else

               if(num<v[mij])

                   return div_imp (p, mij-1);

               else

                   return div_imp (mij+1,q);

       }

}

int main()

{

   v[0]=1; v[1]=1;

   for (i=2; i<=50; ++i)

   {

       v[i]=v[i-1]+v[i-2];

   }

   while (f >> num)

   {

       if (div_imp(0,50)) ++contor;

   }

   g << contor;

}

Explicație:


boiustef: crezând, din start, că nu voi intra în timp am creat vectorul termenilor fibo şi prin Cautare Binara verificam dacă numerele din fişier există în vector
Alte întrebări interesante