4006 - Partitie AB: Difference between revisions
Andrada378 (talk | contribs) No edit summary |
Andrada378 (talk | contribs) |
||
Line 25: | Line 25: | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python"> | <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: | |||
if n - b < b: | a, b = b, a | ||
a, b = b, a | |||
rezultat = [] | rezultat = [] | ||
termeni_a = (n - b) // | termeni_a = (n - b) // a | ||
for _ in range(termeni_a): | for _ in range(termeni_a): | ||
rezultat.append(a) | rezultat.append(a) | ||
for _ in range((n - b) - (termeni_a * a)): | for _ in range((n - b) - (termeni_a * a)): | ||
rezultat.append(b) | rezultat.append(b) | ||
return sorted(rezultat) | return sorted(rezultat) | ||
def main(): | def main(): | ||
n = int(input("Introduceți valoarea lui n: ")) | n = int(input("Introduceți valoarea lui n: ")) | ||
a = int(input("Introduceți valoarea lui a: ")) | a = int(input("Introduceți valoarea lui a: ")) | ||
b = int(input("Introduceți valoarea lui b: ")) | b = int(input("Introduceți valoarea lui b: ")) | ||
if | if validare_date(n, a, b): | ||
rezultat = scrie_n_ca_suma(n, a, b) | rezultat = scrie_n_ca_suma(n, a, b) | ||
print("Termenii ceruți:", rezultat) | print("Termenii ceruți:", rezultat) | ||
else: | else: | ||
print("Verificați condițiile: 1 ≤ n ≤ 1.000.000, 1 ≤ a < b ≤ 1000!") | |||
print("Verificați condițiile: 1 ≤ a < b | |||
if __name__ == "__main__": | if __name__ == "__main__": | ||
main() | main() | ||
</syntaxhighlight> | </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>