Informatică, întrebare adresată de Anca26Iacob, 9 ani în urmă

(#2820 pe pbinfo)

Cerința
Se consideră șirul 1, -1, 2 … definit astfel: f1=1, f2=−1, iar fn=1−2⋅fn−1−fn−2, dacă n≥3 (unde n este un număr natural).

Se citește un număr natural, n (n∈[1,106]), și se cere să se afișeze, separați prin câte un spațiu, primii n termeni ai șirului, în ordine inversă apariției lor în acesta.

Date de intrare
Fișierul de intrare sir11.in conține pe prima linie numărul n.

Date de ieșire
Fișierul de ieșire sir11.out va conține pe prima linie, separați prin câte un spațiu, primii n termeni ai șirului, în ordine inversă apariției lor în acesta.

Restricții și precizări
Pentru determinarea și afișarea numerelor cerute se utilizează un algoritm eficient din punctul de vedere al spațiului de memorie și al timpului de executare;
se recomandă evitarea memorării numerelor într-un tablou sau în altă structură de date similară
în enunțul original, n∈[1,109]; datorită dimensiunilor fișierelor obținute, limita maximă a lui n a fost redusă;

Exemplu
sir11.in

3
sir11.out

2 -1 1


boiustef: nu ai încercat nici o idee? aici e calcule mate

Răspunsuri la întrebare

Răspuns de boiustef
4

Răspuns:

#include <iostream>

#include <fstream>

using namespace std;

ifstream f("sir11.in");

ofstream g("sir11.out");

int n, i, a, b, c;

int main()

{

   f >> n;

   if (n==1) g << 1;

   else

   {

       if (n==2) g << -1 << " " << 1;

       else

       {

           a=1; b=-1;

           for (i=3; i<=n; ++i)

           {

               c=1-2*b-a;

               a=b; b=c;

           }

           b=a;

           g << c << " " << b << " ";

           for (i=n-2; i>0; --i)

           {

               a=1-2*b-c;

               g << a << " ";

               c=b; b=a;

           }

       }

   }

}

Explicație:

cu formulă recurentă am plecat cu trei variabile a,b,c până c ajunge la termenul fn şi mergând ânapoi cu altă formulă recurentă aflu termenii şi afişare

Răspuns de pmarian98
2

Răspuns:

#2820

Explicație:

#include <iostream>

#include <fstream>

#include <algorithm>

using namespace std;

ifstream f("sir11.in");

ofstream g("sir11.out");

int x;

int main()

{

   f >> x;

   for(int i=x;i>=1;i--)

       if(i%2==0)

       g<<-i/2<<" ";

   else

       g<<(i+1)/2<<" ";

   g.close();

   return 0;

}


boiustef: am observat şi eu asta... dar după prima idee cu care am fost punstat cu 100, nu m-am obosit să realizez a doua idee... :)))
Alte întrebări interesante