0798 - Interval Factorial

From Bitnami MediaWiki
Revision as of 18:07, 2 April 2023 by Cuceu Andrei (talk | contribs) (Pagină nouă: ==Enunt== Un interval cu proprietatea că există un singur număr natural, '''n (2≤n)''', pentru care valoarea produsului '''1·2·3·...·n''' aparține acestui interval este numit interval factorial al lui '''n'''. '''Exemplu''': '''[5,8]''' și '''[3,23]''' sunt intervale factoriale ale lui '''3''', dar '''[1,15]''' și '''[7,10]''' nu sunt intervale factoriale ale niciunui număr. ==Cerinţa== Să se scrie o funcție Python care, pentru un număr natural n transmi...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Enunt

Un interval cu proprietatea că există un singur număr natural, n (2≤n), pentru care valoarea produsului 1·2·3·...·n aparține acestui interval este numit interval factorial al lui n. Exemplu: [5,8] și [3,23] sunt intervale factoriale ale lui 3, dar [1,15] și [7,10] nu sunt intervale factoriale ale niciunui număr.


Cerinţa

Să se scrie o funcție Python care, pentru un număr natural n transmis ca parametru, determină și întoarce prin intermediul unor parametrii de ieșire un interval factorial al lui n de lungime maximă.


Restricţii şi precizări

Numele funcției va fi interval și va avea exact trei parametri, în această ordine:

  • primul parametru, n, reprezintă un număr natural din intervalul [2,10]
  • a și b, prin care furnizează câte un număr natural, astfel încât expresia b-a să aibă valoare maximă, iar [a,b] să fie interval factorial al lui n.


Exemplu

Dacă n=3, apelul subprogramului va furniza prin parametrul a valoarea 3, iar prin b valoarea 23.


Important

Soluţia propusă va conţine doar definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.

Rezolvare

Rezolvare ver. 1

<syntaxhighlight lang="python" line="1" start="1">

def interval(n, a, b):

   if n < 2 or n > 10:
       return "n trebuie să fie un număr natural în intervalul [2,10]"
   
   produs = i = 1
   a = b = 1
   
   while produs <= b:
       if produs < a:
           i += 1
           produs *= i
       else:
           b += 1
           produs *= b
           
   a = i
   
   while produs >= a:
       b += 1
       produs *= b
       
   b -= 1
   
   return a, b

def main():

   n = 3
   a, b = interval(n, 1, 100)
   print(f"Pentru n = {n}, intervalul factorial de lungime maximă este [{a},{b}]")
   n = 5
   a, b = interval(n, 1, 100)
   print(f"Pentru n = {n}, intervalul factorial de lungime maximă este [{a},{b}]")
   n = 7
   a, b = interval(n, 1, 100)
   print(f"Pentru n = {n}, intervalul factorial de lungime maximă este [{a},{b}]")

if __name__ == '__main__':

   main()


</syntaxhighlight>