Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Bitnami MediaWiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
1944 - Suma 6
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
Sursa: [https://www.pbinfo.ro/probleme/1944/suma6] ---- == Cerinţa == La ultima oră de matematică, Ionel a învățat despre numere speciale. Acestea sunt numere naturale cu număr impar de cifre care au prima cifră egală cu ultima. Ionel a primit ca temă să analizeze un șir format din numere având număr impar de cifre. El trebuie să determine suma cifrelor din mijloc, de la numerele speciale care se găsesc în șirul dat. <br> Se citește numărul natural '''numar''' și apoi se citesc '''numar''' numere naturale având fiecare număr impar de cifre. Să se calculeze suma cifrelor din mijlocul numerelor speciale din șirul dat. == Date de intrare == Fișierul de intrare '''suma6.in''' conține pe prima linie numărul natural '''numar'''. Pe a doua linie în fișier, se găsesc separate prin câte un spațiu '''numar''' numere naturale, fiecare având număr impar de cifre. == Date de ieșire == Dacă datele sunt introduse corect, pe ecran se va afișa: '''"Datele sunt introduse corect."''', apoi, fișierul de ieșire '''suma6.out''' va conține pe prima linie un număr ce reprezintă suma cifrelor din mijlocul numerelor speciale din șirul dat. În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: '''"Datele nu corespund restricțiilor impuse."''''. == Restricţii şi precizări == * '''1''' ≤ '''numar''' ≤ '''1000''' * cele '''numar''' numere au cel mult nouă cifre * pentru 30% dintre teste cele '''numar''' numere au exact trei cifre == Exemple == ===Exemplul 1=== ; suma6.in : 5 : 122 13501 407 212 49974 ; Ecran : Datele sunt introduse corect. ; suma6.out : 15 <br> == Explicație == Numerele speciale din șirul dat sunt: '''13501, 212 și 49974'''. Suma cifrelor din mijlocul lor este: '''s= 5 + 1 + 9 = 15'''. <br> == Rezolvare == <syntaxhighlight lang="python" line> # 1944 def este_numar_special(numar): if len(numar) % 2 == 0: return False if numar[0] != numar[-1]: return False return True def citeste_date(): with open("suma6.in", "r") as f: numar = int(f.readline()) numere = f.readline().split() if numar < 1 or numar > 1000: print("Datele nu corespund restricțiilor impuse.") return [] numere_speciale = [] for n in numere: if este_numar_special(n): numere_speciale.append(n) return numere_speciale def calculeaza_suma_cifrelor(numere_speciale): suma = 0 for n in numere_speciale: mijloc = len(n) // 2 cifre_mijloc = [int(x) for x in n[mijloc - 1:mijloc + 2]] suma += sum(cifre_mijloc) return suma def main(): numere_speciale = citeste_date() if len(numere_speciale) == 0: return suma = calculeaza_suma_cifrelor(numere_speciale) print("Datele sunt introduse corect.") with open("suma6.out", "w") as f: f.write(str(suma)) if __name__ == "__main__": main() </syntaxhighlight> == Explicație rezolvare == Funcția '''este_numar_special(numar)''' primește un număr sub formă de string și verifică dacă acesta este un număr special, adică are un număr impar de cifre și prima cifră este egală cu ultima cifră. Returnează True dacă numărul este special și False altfel.<br> Funcția '''citeste_date()''' citește datele din fișierul de intrare '''suma6.in'''. Aceasta verifică dacă numărul de numere din fișier este între 1 și 1000, apoi citește fiecare număr sub formă de string și verifică dacă este un număr special folosind funcția '''este_numar_special(numar)'''. Returnează o listă cu numerele speciale din șirul dat. <br> Funcția '''calculeaza_suma_cifrelor(numere_speciale)''' primește o listă de numere speciale sub formă de string și calculează suma cifrelor din mijlocul acestora, iterează prin fiecare număr special și extrage cifrele din mijlocul acestuia (2 sau 3 cifre, depinde de numărul de cifre al numărului special) și calculează suma acestor cifre, apoi returnează suma finală.<br> Funcția '''main()''' apelează funcția '''citeste_date()''' și verifică dacă lista returnată nu este goală. Dacă lista nu este goală, apelează funcția '''calculeaza_suma_cifrelor(numere_speciale)''' și afișează mesajul '''"Datele sunt introduse corect."''' și scrie rezultatul în fișierul de ieșire '''suma6.out'''. Altfel, funcția se încheie fără a face nimic.<br> Ultima linie verifică dacă acest fișier a fost rulat ca program principal și apelează funcția '''main()''' în acest caz.
Summary:
Please note that all contributions to Bitnami MediaWiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Bitnami MediaWiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Toggle limited content width