0861 - Dublare: Difference between revisions
Cristina94 (talk | contribs) mNo edit summary |
Cristina94 (talk | contribs) mNo edit summary |
||
(One intermediate revision by the same user not shown) | |||
Line 19: | Line 19: | ||
;Iesire: | ;Iesire: | ||
:Numarul maxim de operatii de dublare este: 1 | :Numarul maxim de operatii de dublare este: 1 | ||
==Exemplu 2== | |||
;Intrare: | |||
:abc# | |||
;Iesire: | |||
:Șirul de caractere trebuie să conțină doar litere mici ale alfabetului englez. | |||
==Explicație== | ==Explicație== | ||
Line 26: | Line 33: | ||
<syntaxhighlight lang="python" line="1"> | <syntaxhighlight lang="python" line="1"> | ||
#861 Dublare | #861 Dublare | ||
import string | |||
def numar_maxim_dublari(s): | def numar_maxim_dublari(s): | ||
lungime_s = len(s) | lungime_s = len(s) | ||
Line 39: | Line 48: | ||
def validate_input(s): | def validate_input(s): | ||
if not s: | if not s: | ||
return False, " | return False, "Șirul de caractere nu poate fi gol." | ||
if not all(ch in string.ascii_lowercase for ch in s): | |||
return False, "Șirul de caractere trebuie să conțină doar litere mici ale alfabetului englez." | |||
return True, None | return True, None | ||
def main(): | def main(): | ||
s = input(" | s = input("Introduceți șirul de caractere: ") | ||
is_valid, error_message = validate_input(s) | is_valid, error_message = validate_input(s) | ||
Line 53: | Line 65: | ||
rezultat = numar_maxim_dublari(s) | rezultat = numar_maxim_dublari(s) | ||
print(" | print("Numărul maxim de operații de dublare este:", rezultat) | ||
if __name__ == "__main__": | if __name__ == "__main__": | ||
main() | main() | ||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 18:21, 9 February 2024
Cerința[edit | edit source]
Fie un șir de caractere. Prin dublarea șirului înțelege oglindirea sa și concatenarea oglinditului la șirul inițial. De exemplu, prin dublarea șirului arc se obține șirul arccra. Orice șir de caractere se poate obține prin dublarea de un număr de ori (eventual de zero ori) a unui șir de caractere.
Se dă un șir de caractere s. Să se determine numărul maxim de operații de dublare care pot fi aplicate succesiv pentru a obține șirul s.
Date de intrare[edit | edit source]
Programul citește de la tastatură șirul s, format din litere mici ale alfabetului englez.
Date de ieșire[edit | edit source]
Programul va afișa pe ecran numărul M, reprezentând numărul maxim de operații de dublare prin care se poate obține s.
Restricții și precizări:[edit | edit source]
- șirul s va avea cel mult 255 caractere
Exemplu 1[edit | edit source]
- Intrare
- abba
- Iesire
- Numarul maxim de operatii de dublare este: 1
Exemplu 2[edit | edit source]
- Intrare
- abc#
- Iesire
- Șirul de caractere trebuie să conțină doar litere mici ale alfabetului englez.
Explicație[edit | edit source]
Sirul initial este ab. Dupa o dublare devine abba.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="1">
- 861 Dublare
import string
def numar_maxim_dublari(s):
lungime_s = len(s) for lungime in range(1, lungime_s + 1): substr = s[:lungime] if s == substr * (lungime_s // lungime): return lungime_s // lungime
return 1
def validate_input(s):
if not s: return False, "Șirul de caractere nu poate fi gol."
if not all(ch in string.ascii_lowercase for ch in s): return False, "Șirul de caractere trebuie să conțină doar litere mici ale alfabetului englez."
return True, None
def main():
s = input("Introduceți șirul de caractere: ")
is_valid, error_message = validate_input(s)
if not is_valid: print("Date de intrare invalide:", error_message) return
rezultat = numar_maxim_dublari(s) print("Numărul maxim de operații de dublare este:", rezultat)
if __name__ == "__main__":
main()
</syntaxhighlight>