4006 - Partitie AB: Difference between revisions
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) No edit summary |
||
Line 1: | Line 1: | ||
== 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 | == 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. | ||
== 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. | |||
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 scrie_n_ca_suma(n, a, b): | def scrie_n_ca_suma(n, a, b): | ||
if n - b < b: # Verificăm dacă adăugând b depășim n | |||
a, b = b, a # Schimbăm a și b pentru a ne asigura că b este mai mare | |||
rezultat = [] | |||
termeni_a = (n - b) // a # Numărul maxim de termeni egali cu 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(): | 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 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() | |||
</syntaxhighlight> |
Revision as of 13:47, 2 January 2024
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.
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 ș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:
Intrare
40 3 5
Iesire
3 3 3 3 3 3 3 3 3 3 5 5
Rezolvare
<syntaxhighlight lang="python"> def scrie_n_ca_suma(n, a, b):
if n - b < b: # Verificăm dacă adăugând b depășim n
a, b = b, a # Schimbăm a și b pentru a ne asigura că b este mai mare
rezultat = []
termeni_a = (n - b) // a # Numărul maxim de termeni egali cu 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 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()
</syntaxhighlight>