2843 - Puteri6: Diferență între versiuni
Fără descriere a modificării |
mFără descriere a modificării |
||
Linia 40: | Linia 40: | ||
def puteri6(vector, numar): | def puteri6(vector, numar): | ||
vector_elemente = vector[1:] | |||
vector_elemente.sort() | |||
f = open("puteri6.out", "w") | f = open("puteri6.out", "w") | ||
if len( | if len(vector_elemente) < numar: | ||
f.write("nu exista") | f.write("nu exista") | ||
else: | else: | ||
f.write(str( | f.write(str(vector_elemente[numar - 1])) | ||
def conform_restrictiilor(): | def conform_restrictiilor(): | ||
vector = list() | vector = list() | ||
puteri10 = [1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000] | |||
with open('puteri6.in') as f: | with open('puteri6.in') as f: | ||
lines = f.readlines() | lines = f.readlines() | ||
Linia 60: | Linia 60: | ||
numar = vector[0] | numar = vector[0] | ||
for i in range(1, len(vector)): | for i in range(1, len(vector)): | ||
element = vector[i] | |||
repetare_element = puteri10.count(element) | |||
if | if repetare_element == 0: | ||
print("Datele nu sunt comform restricțiilor impuse.") | print("Datele nu sunt comform restricțiilor impuse.") | ||
exit() | exit() | ||
Linia 72: | Linia 72: | ||
vector, numar = conform_restrictiilor() | vector, numar = conform_restrictiilor() | ||
puteri6(vector, numar) | puteri6(vector, numar) | ||
</syntaxhighlight> | </syntaxhighlight> |
Versiunea de la data 19 martie 2023 17:08
Sursa: -Puteri6
Cerinţa
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
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
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
- 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
Exemplul 1
- puteri6.in
- 5
- 100 100000 1 100000 1000 100 10
- Ieșire
- Datele sunt corecte.
- puteri6.out
- 1000
Exemplul 2
- puteri6.in
- 4
- 100 1000 10
- Ieșire
- Datele sunt corecte.
- puteri6.out
- Nu exista
Exemplul 3
- puteri6.in
- 5
- 2 3 4 5 6
- Ieșire
- Datele nu sunt comform restricțiilor impuse.
Rezolvare
# 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)