2843 - Puteri6: Difference between revisions
mNo edit summary |
No edit summary |
||
Line 75: | Line 75: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==Explicaţie cod== | |||
Acest cod citește un fișier de intrare numit '''puteri6.in''' care conține un număr întreg '''N''' și '''N''' numere întregi, și verifică dacă toate numerele din intrare sunt puteri ale lui 10. Dacă datele sunt conforme cu restricțiile impuse, se afișează al '''N'''-lea cel mai mare număr care este o putere a lui 10 din lista numerelor întregi citite din fișierul de intrare. În caz contrar, se afișează un mesaj de eroare. | |||
Mai precis, funcția '''conform_restrictiilor''' citește fișierul de intrare și verifică dacă fiecare număr este o putere a lui 10. Funcția returnează vectorul de numere citite și numar care este primul număr din fișier, reprezentând numărul de elemente din vector. Funcția '''puteri6''' sortează vectorul și verifică dacă există suficiente elemente în '''vector''' pentru a afișa cel de-al '''N'''-lea cel mai mare număr care este o putere a lui 10. Dacă există, afișează acest număr, altfel afișează '''nu exista'''. |
Latest revision as of 13:48, 30 April 2023
Sursa: -Puteri6
Cerinţa[edit | edit source]
Se dă un număr natural numar (1≤n≤106 ), și un șir cu cel mult 1000000 de elemente, numere naturale de forma 10^p (0≤p≤9). Se cere să se afișeze numărul care ar apărea pe poziția numar în șirul ordonat crescător. Dacă șirul are mai puțin de numar termeni, se afișează mesajul Nu exista.
Date de intrare[edit | edit source]
Fișierul de intrare puteri6.in conține pe prima linie numărul numar, iar pe a doua linie elementele șirului dat, separate prin spații.
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.", iar apoi in fişierul de ieșire puteri6.out va conține pe prima linie numărul care ar apărea pe poziția numar în șirul ordonat crescător sau mesajul Nu exista, dacă șirul are mai puțin de numar termeni. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".
Restricţii şi precizări[edit | edit source]
- Pentru determinarea numărului cerut se utilizează un algoritm eficient din punctul de vedere al timpului de executare. Se recomandă evitarea memorării valorilor elementelor din șir într-un tablou sau în altă structură de date similară.
Exemple[edit | edit source]
Exemplul 1[edit | edit source]
- puteri6.in
- 5
- 100 100000 1 100000 1000 100 10
- Ieșire
- Datele sunt corecte.
- puteri6.out
- 1000
Exemplul 2[edit | edit source]
- puteri6.in
- 4
- 100 1000 10
- Ieșire
- Datele sunt corecte.
- puteri6.out
- Nu exista
Exemplul 3[edit | edit source]
- puteri6.in
- 5
- 2 3 4 5 6
- Ieșire
- Datele nu sunt comform restricțiilor impuse.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 0239 Puteri6
def puteri6(vector, numar):
vector_elemente = vector[1:] vector_elemente.sort() f = open("puteri6.out", "w") if len(vector_elemente) < numar: f.write("nu exista") else: f.write(str(vector_elemente[numar - 1]))
def conform_restrictiilor():
vector = list() puteri10 = [1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000] with open('puteri6.in') as f: lines = f.readlines() for line in lines: for c in line.split(): if c.isdigit() is True: vector.append(int(c)) numar = vector[0] for i in range(1, len(vector)): element = vector[i] repetare_element = puteri10.count(element) if repetare_element == 0: print("Datele nu sunt comform restricțiilor impuse.") exit() print("Datele sunt corecte.") return vector, numar
if __name__ == '__main__':
vector, numar = conform_restrictiilor() puteri6(vector, numar)
</syntaxhighlight>
Explicaţie cod[edit | edit source]
Acest cod citește un fișier de intrare numit puteri6.in care conține un număr întreg N și N numere întregi, și verifică dacă toate numerele din intrare sunt puteri ale lui 10. Dacă datele sunt conforme cu restricțiile impuse, se afișează al N-lea cel mai mare număr care este o putere a lui 10 din lista numerelor întregi citite din fișierul de intrare. În caz contrar, se afișează un mesaj de eroare.
Mai precis, funcția conform_restrictiilor citește fișierul de intrare și verifică dacă fiecare număr este o putere a lui 10. Funcția returnează vectorul de numere citite și numar care este primul număr din fișier, reprezentând numărul de elemente din vector. Funcția puteri6 sortează vectorul și verifică dacă există suficiente elemente în vector pentru a afișa cel de-al N-lea cel mai mare număr care este o putere a lui 10. Dacă există, afișează acest număr, altfel afișează nu exista.