1653 – Proporționale1: Difference between revisions
Am creat de la zero. |
|||
(One intermediate revision by the same user not shown) | |||
Line 23: | Line 23: | ||
== Rezolvare == | == Rezolvare == | ||
=== Rezolvare ver. 1 === | |||
<syntaxhighlight lang="python" line> | |||
def citeste_numar_elemente(): | |||
while True: | |||
try: | |||
numar_elemente = int(input("Introduceti numarul de elemente (maxim 100): ")) | |||
if numar_elemente < 1 or numar_elemente > 100: | |||
raise ValueError | |||
return numar_elemente | |||
except ValueError: | |||
print("Numarul de elemente trebuie sa fie un numar intre 1 si 100.") | |||
def citeste_siruri(numar_elemente): | |||
while True: | |||
try: | |||
sir_1 = list(map(int, input("Introduceti elementele primului sir, separate prin spatiu: ").split())) | |||
sir_2 = list(map(int, input("Introduceti elementele celui de-al doilea sir, separate prin spatiu: ").split())) | |||
if len(sir_1) != numar_elemente or len(sir_2) != numar_elemente: | |||
raise ValueError | |||
for i in range(numar_elemente): | |||
if sir_1[i] < 1 or sir_1[i] > 9999 or sir_2[i] < 1 or sir_2[i] > 9999: | |||
raise ValueError | |||
return sir_1, sir_2 | |||
except ValueError: | |||
print("Elementele trebuie sa fie numere naturale nenule cu cel mult 4 cifre si sa fie exact {} elemente in fiecare sir.".format(numar_elemente)) | |||
def verifica_proportionalitate(sir_1, sir_2): | |||
sir_1.sort() | |||
sir_2.sort() | |||
for i in range(numar_elemente): | |||
if sir_1[i] * sir_2[numar_elemente-1-i] != sir_1[numar_elemente-1-i] * sir_2[i]: | |||
return False | |||
return True | |||
if __name__ == '__main__': | |||
numar_elemente = citeste_numar_elemente() | |||
sir_1, sir_2 = citeste_siruri(numar_elemente) | |||
if verifica_proportionalitate(sir_1, sir_2): | |||
print("DA") | |||
else: | |||
print("NU") | |||
print("Datele sunt introduse corect.") | |||
</syntaxhighlight> | |||
=== Rezolvare ver. 2 === | |||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
Latest revision as of 09:56, 22 May 2023
Sursa: [1]
Cerinţa[edit | edit source]
Se dau două şiruri cu câte n elemente, numere naturale nenule. Să se verifice dacă este posibilă rearanjarea elementelor celor două şiruri astfel încât acestea să fie invers proporţionale.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n, iar apoi cele n elemente ale şirului, separate prin spaţii.
Date de ieșire[edit | edit source]
Programul afișează pe ecran mesajul DA , dacă este posibilă rearanjarea elementelor celor două şiruri astfel încât acestea să fie invers proporţionale, respectiv NU în caz contrar.
Restricţii şi precizări[edit | edit source]
- 1 ≤ n ≤ 100
- elementele şirurilor vor avea cel mult 4 cifre
Exemplu[edit | edit source]
- Intrare
- 4
- 2 8 4 1
- 4 2 8 16
- Ieșire
- DA
Rezolvare[edit | edit source]
Rezolvare ver. 1[edit | edit source]
<syntaxhighlight lang="python" line>
def citeste_numar_elemente():
while True: try: numar_elemente = int(input("Introduceti numarul de elemente (maxim 100): ")) if numar_elemente < 1 or numar_elemente > 100: raise ValueError return numar_elemente except ValueError: print("Numarul de elemente trebuie sa fie un numar intre 1 si 100.")
def citeste_siruri(numar_elemente):
while True: try: sir_1 = list(map(int, input("Introduceti elementele primului sir, separate prin spatiu: ").split())) sir_2 = list(map(int, input("Introduceti elementele celui de-al doilea sir, separate prin spatiu: ").split())) if len(sir_1) != numar_elemente or len(sir_2) != numar_elemente: raise ValueError for i in range(numar_elemente): if sir_1[i] < 1 or sir_1[i] > 9999 or sir_2[i] < 1 or sir_2[i] > 9999: raise ValueError return sir_1, sir_2 except ValueError: print("Elementele trebuie sa fie numere naturale nenule cu cel mult 4 cifre si sa fie exact {} elemente in fiecare sir.".format(numar_elemente))
def verifica_proportionalitate(sir_1, sir_2):
sir_1.sort() sir_2.sort() for i in range(numar_elemente): if sir_1[i] * sir_2[numar_elemente-1-i] != sir_1[numar_elemente-1-i] * sir_2[i]: return False return True
if __name__ == '__main__':
numar_elemente = citeste_numar_elemente() sir_1, sir_2 = citeste_siruri(numar_elemente) if verifica_proportionalitate(sir_1, sir_2): print("DA") else: print("NU") print("Datele sunt introduse corect.")
</syntaxhighlight>
Rezolvare ver. 2[edit | edit source]
<syntaxhighlight lang="python" line>
- Citim numarul de elemente din siruri si validam datele de intrare
while True:
try: numar_elemente = int(input("Introduceti numarul de elemente (maxim 100): ")) if numar_elemente < 1 or numar_elemente > 100: raise ValueError break except ValueError: print("Numarul de elemente trebuie sa fie un numar intre 1 si 100.")
- Citim cele doua siruri si validam datele de intrare
while True:
try: sir_1 = list(map(int, input("Introduceti elementele primului sir, separate prin spatiu: ").split())) sir_2 = list(map(int, input("Introduceti elementele celui de-al doilea sir, separate prin spatiu: ").split())) if len(sir_1) != numar_elemente or len(sir_2) != numar_elemente: raise ValueError for i in range(numar_elemente): if sir_1[i] < 1 or sir_1[i] > 9999 or sir_2[i] < 1 or sir_2[i] > 9999: raise ValueError break except ValueError: print("Elementele trebuie sa fie numere naturale nenule cu cel mult 4 cifre si sa fie exact {} elemente in fiecare sir.".format(numar_elemente))
- Sortam cele doua siruri
sir_1.sort() sir_2.sort()
- Verificam daca sirurile sunt proportionale
proportional = True for i in range(numar_elemente):
if sir_1[i] * sir_2[numar_elemente-1-i] != sir_1[numar_elemente-1-i] * sir_2[i]: proportional = False break
- Afisam rezultatul
if proportional:
print("DA")
else:
print("NU")
print("Datele sunt introduse corect.")
</syntaxhighlight>