0806 - Generare sir

From Bitnami MediaWiki
Revision as of 12:57, 3 December 2023 by Gabi (talk | contribs) (Pagină nouă: ==Cerinţa== Se consideră şirul definit mai jos: fn= 1 daca n =1 fn= 1 + f(n-1) daca n e par fn= 1 + 2*f(n-2) dacă n altfel în care nu există doi termeni cu aceeași paritate aflați pe poziții consecutive: <code>1, 2, 3, 4, 7, 8, 15, 16 ....</code>. Pentru un număr natural <code>x</code>, termen al şirului dat, se cere să se afișeze pe ecran, în ordine strict descrescătoare, separați prin câte un spațiu, toţi termenii şirului care sunt mai mici sau...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa

Se consideră şirul definit mai jos:

fn= 1 daca n =1

fn= 1 + f(n-1) daca n e par

fn= 1 + 2*f(n-2) dacă n altfel

în care nu există doi termeni cu aceeași paritate aflați pe poziții consecutive: 1, 2, 3, 4, 7, 8, 15, 16 .....

Pentru un număr natural x, termen al şirului dat, se cere să se afișeze pe ecran, în ordine strict descrescătoare, separați prin câte un spațiu, toţi termenii şirului care sunt mai mici sau egali cu x.

Date de intrare

Programul citeşte de la tastatură numărul x

Date de ieşire

Programul va afişa pe ecran în ordine strict descrescătoare, separați prin câte un spațiu, toţi termenii şirului care sunt mai mici sau egali cu x.

Exemplul 1

Date intrare 15

Date iesire 15 8 7 4 3 2 1

Exemplul 2

Date intrare 0

Numărul introdus nu respectă restricțiile.

Rezolvare

<syntaxhighlight lang="python3"> def verifica_restrictii(x):

   return 1 <= x <= 1000000000

def genereaza_si_afiseaza_sir(x):

   def f(n):
       if n == 1:
           return 1
       elif n % 2 == 0:
           return 1 + f(n - 1)
       else:
           return 1 + 2 * f(n - 2)
   termeni_sir = []
   # Generăm șirul până când obținem un termen mai mare decât x
   n = 1
   while f(n) <= x:
       termeni_sir.append(f(n))
       n += 1
   # Afișăm termenii în ordine descrescătoare
   termeni_sir.sort(reverse=True)
   print(" ".join(map(str, termeni_sir)))

def main():

   x = int(input("Introduceți numărul x: "))
   if verifica_restrictii(x):
       genereaza_si_afiseaza_sir(x)
   else:
       print("Numărul introdus nu respectă restricțiile.")

if __name__ == "__main__":

   main()

</syntaxhighlight>