Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <math.h>
- using namespace std;
- void Uredi(int &a, int &b)
- {
- a = a + b;
- b = -b;
- b = a + b;
- a = a - b;
- }
- int main()
- {
- int N, M;
- cin >> N >> M;
- int a, brojac, brj;
- double koren1, koren2;
- int fib[10005], indeksi[10005];
- bool jesu[10005];
- brojac = 0;
- for (int i = 0; i<M + 1; i++)
- jesu[i] = false;
- brj = 0;
- //izdvajanje Fibonacijevih brojeva i njihovih indeksa
- for (int i = 0; i<N; i++)
- {
- cin >> a;
- koren1 = sqrt(5 * a*a + 4);
- koren2 = sqrt(5 * a*a - 4);
- if ((floor (koren1) == koren1) || (floor(koren2) == koren2))
- {
- if (a == 1 && brj != 2)
- {
- fib[brojac] = a;
- indeksi[brojac] = i;
- brj++;
- brojac++;
- }
- if (!(jesu[a]) && a!=1)
- {
- fib[brojac] = a;
- indeksi[brojac] = i;
- jesu[a] = true;
- brojac++;
- }
- }
- }
- //fib - fibonacijevi brojevi, indeksi - njihovi indeksi
- //brojac - duzina od fib
- //sortiranje niza fib
- bool moze = true;
- int k = 0;
- while (moze)
- {
- moze = false;
- for (int i = brojac - 1; i > k; i--)
- {
- if (fib[i] < fib[i - 1])
- {
- Uredi(fib[i], fib[i - 1]);
- Uredi(indeksi[i], indeksi[i - 1]);
- moze = true;
- }
- }
- k++;
- }
- //provera koji je segmenat najduzi fibonacijev podniz
- int trenutna = 0;
- int poctrenutna = 0;
- int pocmax = 0;
- int max = 0;
- for (int i = 0; i < brojac-2; i++)
- {
- if (fib[i] + fib[i + 1] == fib[i + 2])
- {
- trenutna++;
- if (trenutna > max)
- {
- max = trenutna;
- pocmax = poctrenutna;
- }
- }
- else
- {
- trenutna = 0;
- poctrenutna = i + 2;
- i++;
- }
- }
- for (int i = pocmax; i < pocmax + max + 2; i++)
- cout << indeksi[i] << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement