4006 - Partitie AB: Difference between revisions

From Bitnami MediaWiki
Andrada378 (talk | contribs)
Pagină nouă: Cerinta Se dau trei numere naturale n a b, 1 ≤ a < b < n. Să se determine o modalitate de a-l scrie pe n ca sumă de termeni egali cu a sau b în care numărul de termeni egali cu a este maxim. Date de intrare Programul citește de la tastatură numerele n a b. Date de iesire Programul va afișa pe ecran un șir de numere ordonate crescător, reprezentând termenii ceruți. Restrictii si precizari: 1 ≤ n ≤ 1.000.000 1 ≤ a < b ≤ 1000 pentru toate datele de...
 
Andrada378 (talk | contribs)
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
Cerinta
== Cerința ==
 
Se dau trei numere naturale n a b, 1 ≤ a < b < n. Să se determine o modalitate de a-l scrie pe n ca sumă de termeni egali cu a sau b în care numărul de termeni egali cu a este maxim.
Se dau trei numere naturale n a b, 1 ≤ a < b < n. Să se determine o modalitate de a-l scrie pe n ca sumă de termeni egali cu a sau b în care numărul de termeni egali cu a este maxim.


Date de intrare
== Date de intrare ==
 
Programul citește de la tastatură numerele n a b.
Programul citește de la tastatură numerele n a b.


Date de iesire
== Date de ieșire ==
 
Programul va afișa pe ecran un șir de numere ordonate crescător, reprezentând termenii ceruți.
Programul va afișa pe ecran un șir de numere ordonate crescător, reprezentând termenii ceruți.


Restrictii si precizari:
== Restricții și precizări: ==
 
1 ≤ n ≤ 1.000.000
 
1 ≤ a < b ≤ 1000
 
pentru toate datele de test n poate fi scris ca sumă de termeni egali cu a și b.


Exemplu
* 1 ≤ n ≤ 1.000.000
* 1 ≤ a < b ≤ 1000
* pentru toate datele de test n poate fi scris ca sumă de termeni egali cu a și b.


Intrare
=== Exemplu: ===
'''Intrare'''


40 3 5
40 3 5


Iesire
'''Iesire'''


3 3 3 3 3 3 3 3 3 3 5 5
3 3 3 3 3 3 3 3 3 3 5 5


Rezolvare
== Rezolvare ==
<syntaxhighlight lang="python">
def validare_date(n, a, b):
    return 1 <= n <= 1000000 and 1 <= a < b <= 1000


def scrie_n_ca_suma(n, a, b):
def scrie_n_ca_suma(n, a, b):
    if n - b < b:
        a, b = b, a


    if n - b < b:  # Verificăm dacă adăugând b depășim n
    rezultat = []


        a, b = b, a  # Schimbăm a și b pentru a ne asigura că b este mai mare
    termeni_a = (n - b) // a


    rezultat = []
    for _ in range(termeni_a):
        rezultat.append(a)


    termeni_a = (n - b) // a  # Numărul maxim de termeni egali cu a
    for _ in range((n - b) - (termeni_a * a)):
        rezultat.append(b)


    # Adăugăm termenii egali cu a și apoi cu b pentru a forma suma n
    return sorted(rezultat)
 
    for _ in range(termeni_a):
 
        rezultat.append(a)
 
    for _ in range((n - b) - (termeni_a * a)):
 
        rezultat.append(b)
 
    return sorted(rezultat)  # Returnăm șirul de termeni ordonat crescător


def main():
def main():
    n = int(input("Introduceți valoarea lui n: "))
    a = int(input("Introduceți valoarea lui a: "))
    b = int(input("Introduceți valoarea lui b: "))


    n = int(input("Introduceți valoarea lui n: "))
    if validare_date(n, a, b):
 
        rezultat = scrie_n_ca_suma(n, a, b)
    a = int(input("Introduceți valoarea lui a: "))
        print("Termenii ceruți:", rezultat)
 
    else:
    b = int(input("Introduceți valoarea lui b: "))
        print("Verificați condițiile: 1 ≤ n ≤ 1.000.000, 1 ≤ a < b ≤ 1000!")
 
    if 1 <= a < b < n:
 
        rezultat = scrie_n_ca_suma(n, a, b)
 
        print("Termenii ceruți:", rezultat)
 
    else:
 
        print("Verificați condițiile: 1 ≤ a < b < n!")


if __name__ == "__main__":
if __name__ == "__main__":
 
    main()
    main()
</syntaxhighlight>

Latest revision as of 15:52, 4 January 2024

Cerința[edit | edit source]

Se dau trei numere naturale n a b, 1 ≤ a < b < n. Să se determine o modalitate de a-l scrie pe n ca sumă de termeni egali cu a sau b în care numărul de termeni egali cu a este maxim.

Date de intrare[edit | edit source]

Programul citește de la tastatură numerele n a b.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran un șir de numere ordonate crescător, reprezentând termenii ceruți.

Restricții și precizări:[edit | edit source]

  • 1 ≤ n ≤ 1.000.000
  • 1 ≤ a < b ≤ 1000
  • pentru toate datele de test n poate fi scris ca sumă de termeni egali cu a și b.

Exemplu:[edit | edit source]

Intrare

40 3 5

Iesire

3 3 3 3 3 3 3 3 3 3 5 5

Rezolvare[edit | edit source]

<syntaxhighlight lang="python"> def validare_date(n, a, b):

   return 1 <= n <= 1000000 and 1 <= a < b <= 1000

def scrie_n_ca_suma(n, a, b):

   if n - b < b:
       a, b = b, a
   rezultat = []
   termeni_a = (n - b) // a
   for _ in range(termeni_a):
       rezultat.append(a)
   for _ in range((n - b) - (termeni_a * a)):
       rezultat.append(b)
   return sorted(rezultat)

def main():

   n = int(input("Introduceți valoarea lui n: "))
   a = int(input("Introduceți valoarea lui a: "))
   b = int(input("Introduceți valoarea lui b: "))
   if validare_date(n, a, b):
       rezultat = scrie_n_ca_suma(n, a, b)
       print("Termenii ceruți:", rezultat)
   else:
       print("Verificați condițiile: 1 ≤ n ≤ 1.000.000, 1 ≤ a < b ≤ 1000!")

if __name__ == "__main__":

   main()

</syntaxhighlight>