2757 - Cifre Zecimale 1: Difference between revisions
Paul Ungur (talk | contribs) No edit summary |
Paul Ungur (talk | contribs) No edit summary |
||
Line 73: | Line 73: | ||
n, k_values = citeste_input() | n, k_values = citeste_input() | ||
# Obținem cifrele corespunzătoare pozițiilor k și le afișăm | # Obținem cifrele corespunzătoare pozițiilor k și le afișăm | ||
results = obtine_cifrele_pentru_k(n, k_values) | 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> |
Revision as of 19:23, 29 April 2023
Cerința
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
Programul citește de la tastatură un număr natural n și apoi n numere naturale nenule, k.
Date de ieșire
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.
Restricții și precizări
1 ≤ n ≤ 100.000 1 ≤ k ≤ 2700
Exemplu:
Intrare 3 5 10 18
Ieșire 0 1 5
Explicație
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
<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>