2757 - Cifre Zecimale 1: Difference between revisions
Paul Ungur (talk | contribs) Pagină nouă: ==Cerința== Se consideră șirul de cifre zecimale obținut prin scrierea consecutivă a numerelor naturale de la <span style=“color: red”> 100</span> la <span style=“color: red”> 999</span>: <span style=“color: red”> 100101102103104105…995996997998999</span>. Să se afișeze cifra ce apare pe poziția <span style=“color: red”> k</span> în acest șir. ==Date de intrare== Programul citește de la tastatură un număr natural <span style=“color: red”> n... |
Paul Ungur (talk | contribs) No edit summary |
||
(3 intermediate revisions by the same user not shown) | |||
Line 6: | Line 6: | ||
==Date de ieșire== | ==Date de ieșire== | ||
Programul va afișa pe ecran, pe un singur rând și separate printr-un spațiu, <span style=“color: red”> n</span> numere reprezentând cifrele din șir de pe pozițiile <span style=“color: red”> k</span>, citite. | Dacă datele sunt introduse corect, pe ecran se va afișa: '''"Date de intrare valide."''', apoi Programul va afișa pe ecran, pe un singur rând și separate printr-un spațiu, <span style=“color: red”> n</span> numere reprezentând cifrele din șir de pe pozițiile <span style=“color: red”> k</span>, citite. În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: '''"Date de intrare invalide".''' | ||
==Restricții și precizări== | ==Restricții și precizări== | ||
Line 14: | Line 14: | ||
==Exemplu:== | ==Exemplu:== | ||
Intrare | Intrare | ||
3 | : 3 | ||
5 10 18 | : 5 10 18 | ||
Ieșire | Ieșire | ||
0 1 5 | : Date de intrare valide | ||
: 0 1 5 | |||
==Explicație== | ==Explicație== | ||
Line 25: | Line 26: | ||
==Rezolvare== | ==Rezolvare== | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
def | def validare_date(n, k_values): | ||
# Verificăm dacă n este în intervalul permis | # Verificăm dacă n este în intervalul permis | ||
if n < 1 or n > 100000: | if n < 1 or n > 100000: | ||
Line 36: | Line 37: | ||
return True | return True | ||
def | |||
def citeste_input(): | |||
n = int(input()) | n = int(input()) | ||
k_values = list(map(int, input().split())) | k_values = list(map(int, input().split())) | ||
return n, k_values | return n, k_values | ||
def | |||
def cifre(k): | |||
# Vom construi șirul de cifre folosind o buclă while | # Vom construi șirul de cifre folosind o buclă while | ||
num = 100 | num = 100 | ||
Line 57: | Line 60: | ||
num += 1 | num += 1 | ||
def | |||
def obtine_cifrele_pentru_k(n, k_values): | |||
# Verificăm dacă datele de intrare sunt valide | # Verificăm dacă datele de intrare sunt valide | ||
if not | if not validare_date(n, k_values): | ||
return "Date de intrare invalide" | |||
# Obținem cifra de pe fiecare poziție k și o adăugăm la lista de rezultate | # Obținem cifra de pe fiecare poziție k și o adăugăm la lista de rezultate | ||
results = [ | results = [cifre(k) for k in k_values] | ||
# Afișăm lista de rezultate | # Afișăm lista de rezultate | ||
return results | |||
if __name__ == '__main__': | if __name__ == '__main__': | ||
n, k_values = citeste_input() | |||
# Obținem cifrele corespunzătoare pozițiilor k și le afișăm | |||
if validare_date(n, k_values): | |||
print("Date de intrare valide") | |||
results = obtine_cifrele_pentru_k(n, k_values) | |||
print(*results) | |||
else: | |||
print("Date de intrare invalide") | |||
</syntaxhighlight> | </syntaxhighlight> | ||
==Explicatie cod:== | |||
==Explicatie== | Funcția validare_date(n, k_values) primește un număr n și o listă de valori k_values și verifică dacă acestea respectă anumite condiții. Verificările includ verificarea ca n să fie în intervalul [1, 100000], iar fiecare valoare k din lista k_values să fie în intervalul [1, 2700]. Dacă datele nu respectă aceste condiții, funcția returnează False. În caz contrar, returnează True. | ||
Funcția | Funcția citeste_input() primește input-ul utilizatorului, citind n și lista de valori k_values de la intrare folosind funcția input(). Valoarea n este citită ca un număr întreg, iar lista k_values este citită ca o listă de numere întregi utilizând map() și split(). Funcția returnează n și k_values sub formă de tuplu. | ||
Funcția cifre(k) primește un număr k și calculează cifra de pe poziția k. Acest lucru se face construind un șir de cifre folosind o buclă while. La fiecare iterație, se obțin cifrele numărului curent și se adaugă numărul de cifre la digit_count. Dacă digit_count depășește sau ajunge la poziția k, se returnează cifra corespunzătoare. Se adaugă un offset la k pentru a ajusta indexarea în lista de cifre. | |||
Funcția obtine_cifrele_pentru_k(n, k_values) primește un număr n și o listă de valori k_values și returnează lista de cifre corespunzătoare pozițiilor k din k_values. Verifică mai întâi dacă datele de intrare sunt valide folosind funcția validare_date(). Apoi, utilizează funcția cifre() pentru a obține cifra corespunzătoare fiecărei valori k din lista k_values. Rezultatele sunt stocate într-o listă și returnate. | |||
În blocul if __name__ == '__main__':, se apelează funcția citeste_input() pentru a obține n și k_values de la intrare. Apoi, se verifică dacă datele de intrare sunt valide utilizând funcția validare_date(). Dacă datele sunt valide, se afișează un mesaj de confirmare, se apelează funcția obtine_cifrele_pentru_k() și se afișează rezultatele. În caz contrar, se afișează un mesaj de eroare. |
Latest revision as of 18:57, 29 June 2023
Cerința[edit | edit source]
Se consideră șirul de cifre zecimale obținut prin scrierea consecutivă a numerelor naturale de la 100 la 999: 100101102103104105…995996997998999. Să se afișeze cifra ce apare pe poziția k în acest șir.
Date de intrare[edit | edit source]
Programul citește de la tastatură un număr natural n și apoi n numere naturale nenule, k.
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa: "Date de intrare valide.", apoi Programul va afișa pe ecran, pe un singur rând și separate printr-un spațiu, n numere reprezentând cifrele din șir de pe pozițiile k, citite. În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: "Date de intrare invalide".
Restricții și precizări[edit | edit source]
1 ≤ n ≤ 100.000 1 ≤ k ≤ 2700
Exemplu:[edit | edit source]
Intrare
- 3
- 5 10 18
Ieșire
- Date de intrare valide
- 0 1 5
Explicație[edit | edit source]
A cinceaa cifră din șir este 0, cea de pe poziția 10 este 1, iar cea de pe poziția 18 este 5.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> def validare_date(n, k_values):
# Verificăm dacă n este în intervalul permis if n < 1 or n > 100000: return False # Verificăm dacă toate valorile de k sunt în intervalul permis for k in k_values: if k < 1 or k > 2700: return False # Dacă am trecut de toate verificările, înseamnă că datele de intrare sunt valide return True
def citeste_input():
n = int(input()) k_values = list(map(int, input().split())) return n, k_values
def cifre(k):
# Vom construi șirul de cifre folosind o buclă while num = 100 digit_count = 0 while True: # Obținem cifrele numărului curent digits = [int(d) for d in str(num)] # Adăugăm numărul de cifre din numărul curent la contorul de cifre digit_count += len(digits) # Dacă numărul de cifre depășește poziția k, ne oprim if digit_count >= k: # Obținem cifra de pe poziția k return digits[k - digit_count + len(digits) - 1] # Dacă nu am ajuns încă la poziția k, trecem la următorul număr num += 1
def obtine_cifrele_pentru_k(n, k_values):
# Verificăm dacă datele de intrare sunt valide if not validare_date(n, k_values): return "Date de intrare invalide" # Obținem cifra de pe fiecare poziție k și o adăugăm la lista de rezultate results = [cifre(k) for k in k_values] # Afișăm lista de rezultate return results
if __name__ == '__main__':
n, k_values = citeste_input() # Obținem cifrele corespunzătoare pozițiilor k și le afișăm if validare_date(n, k_values): print("Date de intrare valide") results = obtine_cifrele_pentru_k(n, k_values) print(*results) else: print("Date de intrare invalide")
</syntaxhighlight>
Explicatie cod:[edit | edit source]
Funcția validare_date(n, k_values) primește un număr n și o listă de valori k_values și verifică dacă acestea respectă anumite condiții. Verificările includ verificarea ca n să fie în intervalul [1, 100000], iar fiecare valoare k din lista k_values să fie în intervalul [1, 2700]. Dacă datele nu respectă aceste condiții, funcția returnează False. În caz contrar, returnează True. Funcția citeste_input() primește input-ul utilizatorului, citind n și lista de valori k_values de la intrare folosind funcția input(). Valoarea n este citită ca un număr întreg, iar lista k_values este citită ca o listă de numere întregi utilizând map() și split(). Funcția returnează n și k_values sub formă de tuplu. Funcția cifre(k) primește un număr k și calculează cifra de pe poziția k. Acest lucru se face construind un șir de cifre folosind o buclă while. La fiecare iterație, se obțin cifrele numărului curent și se adaugă numărul de cifre la digit_count. Dacă digit_count depășește sau ajunge la poziția k, se returnează cifra corespunzătoare. Se adaugă un offset la k pentru a ajusta indexarea în lista de cifre. Funcția obtine_cifrele_pentru_k(n, k_values) primește un număr n și o listă de valori k_values și returnează lista de cifre corespunzătoare pozițiilor k din k_values. Verifică mai întâi dacă datele de intrare sunt valide folosind funcția validare_date(). Apoi, utilizează funcția cifre() pentru a obține cifra corespunzătoare fiecărei valori k din lista k_values. Rezultatele sunt stocate într-o listă și returnate. În blocul if __name__ == '__main__':, se apelează funcția citeste_input() pentru a obține n și k_values de la intrare. Apoi, se verifică dacă datele de intrare sunt valide utilizând funcția validare_date(). Dacă datele sunt valide, se afișează un mesaj de confirmare, se apelează funcția obtine_cifrele_pentru_k() și se afișează rezultatele. În caz contrar, se afișează un mesaj de eroare.