4007 - Partitie AB 1: Diferență între versiuni

De la Universitas MediaWiki
(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 minim. 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...)
 
 
(Nu s-a afișat o versiune intermediară efectuată de același utilizator)
Linia 1: Linia 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 minim.
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 minim.


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 si precizări: ==


1 ≤ n ≤ 1.000.000
* 1 ≤ n ≤ 1.000.000
* 1 ≤ a < b ≤ 1000


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


pentru toate datele de test n poate fi scris ca sumă de termeni egali cu a și b.
=== Exemplu: ===
 
'''Intrare'''
Exemplu
 
Intrare


44 3 5
44 3 5


Iesire
'''Iesire'''


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


Rezolvare:
== Rezolvare: ==
<syntaxhighlight lang="python">
def validare_date(n, a, b):
    if not(1 <= n <= 1000000) or not(1 <= a < b <= 1000):
        print("Datele introduse nu respectă condițiile.")
        return False
    return True
def gaseste_valori(n, a, b):
    p, q = -1, -1


def scrie_n_ca_suma(n, a, b):
    for i in range(0, n + 1):
        if (n - i * a) % b == 0:
            p = i
            break


    rezultat = []
    q = (n - p * a) // b


    termeni_b = n // b  # Numărul maxim de termeni egali cu b
    return p, q


    # Adăugăm termenii egali cu b și apoi cu a pentru a forma suma n
def afiseaza_valori(p, q, a, b):
    for i in range(1, p + 1):
        print(a, end=" ")


    for _ in range(termeni_b):
    for i in range(1, q + 1):
        print(b, end=" ")


        rezultat.append(b)
    print()


    for _ in range(n - (termeni_b * b)):
if __name__ == "__main__":
 
    n, a, b = map(int, input().split())
        rezultat.append(a)
 
    return sorted(rezultat)  # Returnăm șirul de termeni ordonat crescător
 
def main():
 
    n = int(input("Introduceți valoarea lui n: "))


    a = int(input("Introduceți valoarea lui a: "))
    p, q = gaseste_valori(n, a, b)
 
    b = int(input("Introduceți valoarea lui b: "))
 
    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__":


    main()
    afiseaza_valori(p, q, a, b)
</syntaxhighlight>

Versiunea curentă din 3 ianuarie 2024 21:28

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 minim.

Date de intrare

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

Date de ieșire

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

Restricții si 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:

Intrare

44 3 5

Iesire

3 3 3 5 5 5 5 5 5 5

Rezolvare:

def validare_date(n, a, b):
    if not(1 <= n <= 1000000) or not(1 <= a < b <= 1000):
        print("Datele introduse nu respectă condițiile.")
        return False
    return True
def gaseste_valori(n, a, b):
    p, q = -1, -1

    for i in range(0, n + 1):
        if (n - i * a) % b == 0:
            p = i
            break

    q = (n - p * a) // b

    return p, q

def afiseaza_valori(p, q, a, b):
    for i in range(1, p + 1):
        print(a, end=" ")

    for i in range(1, q + 1):
        print(b, end=" ")

    print()

if __name__ == "__main__":
    n, a, b = map(int, input().split())

    p, q = gaseste_valori(n, a, b)

    afiseaza_valori(p, q, a, b)