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:
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;
}
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: