0886 - Secv Cons: Diferență între versiuni

De la Universitas MediaWiki
(Pagină nouă: ==Cerința== Se citește un șir format din cel mult 255 caractere, litere mici ale alfabetului englez. Să se determine cea mai lungă secvență din șir formată numai din consoane. ==Date de intrare== Programul citește de la tastatură un șir de caractere S. ==Date de ieșire== Programul va afișa pe ecran subșirul determinat. ==Restricții și precizări== *dacă șirul dat conține mai multe subșiruri formate numai din consoane de lungime maximă se va afișa cea m...)
 
Fără descriere a modificării
 
Linia 21: Linia 21:
:Datele de intrare nu corespund restricțiilor impuse.
:Datele de intrare nu corespund restricțiilor impuse.
==Rezolvare==
==Rezolvare==
<syntaxhighlight lang="python" line="">
<syntaxhighlight lang="python" line="1">
#0886 - Secv Cons
#0886 - Secv Cons
def gaseste_sir(S):
def gaseste_sir(S):
     cel_mai_mare_sir = ""
     cel_mai_mare_sir = "" # inițializăm cel mai mare subșir, format numai din consoane cu un șir gol
     sirul_initial = ""
     sirul_initial = "" # inițializăm șirul în care construim subșirul format numai din consoane
     vocale = "aeiou"
     vocale = "aeiou" # definim lista de vocale
     for c in S[::-1]:
     for c in S[::-1]: # iterăm prin caracterele șirului S, în ordine inversă
         if c not in vocale:
         if c not in vocale: # dacă litera nu este o vocală
             sirul_initial = c + sirul_initial
             sirul_initial = c + sirul_initial # adăugăm caracterul la începutul șirului
         else:
         else:
             if len(sirul_initial) > len(cel_mai_mare_sir):
             if len(sirul_initial) > len(cel_mai_mare_sir): # dacă lungimea șirului este mai mare decât lungimea, cel mai mare subșir găsit până acum
                 cel_mai_mare_sir = sirul_initial
                 cel_mai_mare_sir = sirul_initial # actualizăm cel mai mare subșir
             sirul_initial = ""
             sirul_initial = "" # resetăm șirul curent
     if len(sirul_initial) > len(cel_mai_mare_sir):
     if len(sirul_initial) > len(cel_mai_mare_sir): # verificăm dacă șirul este cel mai mare subșir găsit
         cel_mai_mare_sir = sirul_initial
         cel_mai_mare_sir = sirul_initial # actualizăm cel mai mare subșir
     return cel_mai_mare_sir
     return cel_mai_mare_sir


if __name__ == "__main__":
if __name__ == "__main__":
     S = input("Introduceți șirul de caractere: ")
     S = input("Introduceți șirul de caractere: ")
     if all(c.isalpha() and c.islower() for c in S) and len(S) <= 255 and any(c not in "aeiou" for c in S):
     if all(c.isalpha() and c.islower() for c in S) and len(S) <= 255 and any(c not in "aeiou" for c in S):
         cel_mai_mare_sir = gaseste_sir(S)
        # verificarea restricțiilor
         cel_mai_mare_sir = gaseste_sir(S) # găsim cel mai mare subșir format numai din consoane
         print("Datele de intrare corespund restricțiilor impuse.")
         print("Datele de intrare corespund restricțiilor impuse.")
         print("Cel mai lung subșir format numai din consoane este:", cel_mai_mare_sir)
         print("Cel mai lung subșir format numai din consoane este:", cel_mai_mare_sir) # afișăm rezultatul
     else:
     else:
         print("Datele de intrare nu corespund restricțiilor impuse.")
         print("Datele de intrare nu corespund restricțiilor impuse.")


   
</syntaxhighlight>
</syntaxhighlight>

Versiunea curentă din 21 mai 2023 11:32

Cerința

Se citește un șir format din cel mult 255 caractere, litere mici ale alfabetului englez. Să se determine cea mai lungă secvență din șir formată numai din consoane.

Date de intrare

Programul citește de la tastatură un șir de caractere S.

Date de ieșire

Programul va afișa pe ecran subșirul determinat.

Restricții și precizări

  • dacă șirul dat conține mai multe subșiruri formate numai din consoane de lungime maximă se va afișa cea mai din dreapta;
  • se garantează că în șirul dat există cel puțin o consoană;

Exemplul 1

Intrare
ukdiaehldjasmfx
Ieșire
Datele de intrare corespund restricțiilor impuse.
smfx

Exemplul 2

Intrare
aeiou
Ieșire
Datele de intrare nu corespund restricțiilor impuse.

Rezolvare

#0886 - Secv Cons
def gaseste_sir(S):
    cel_mai_mare_sir = ""  # inițializăm cel mai mare subșir, format numai din consoane cu un șir gol
    sirul_initial = ""  # inițializăm șirul în care construim subșirul format numai din consoane
    vocale = "aeiou"  # definim lista de vocale
    for c in S[::-1]:  # iterăm prin caracterele șirului S, în ordine inversă
        if c not in vocale:  # dacă litera nu este o vocală
            sirul_initial = c + sirul_initial  # adăugăm caracterul la începutul șirului
        else:
            if len(sirul_initial) > len(cel_mai_mare_sir):  # dacă lungimea șirului este mai mare decât lungimea, cel mai mare subșir găsit până acum
                cel_mai_mare_sir = sirul_initial  # actualizăm cel mai mare subșir
            sirul_initial = ""  # resetăm șirul curent
    if len(sirul_initial) > len(cel_mai_mare_sir):  # verificăm dacă șirul este cel mai mare subșir găsit
        cel_mai_mare_sir = sirul_initial  # actualizăm cel mai mare subșir
    return cel_mai_mare_sir


if __name__ == "__main__":
    S = input("Introduceți șirul de caractere: ")
    if all(c.isalpha() and c.islower() for c in S) and len(S) <= 255 and any(c not in "aeiou" for c in S):
        # verificarea restricțiilor
        cel_mai_mare_sir = gaseste_sir(S)  # găsim cel mai mare subșir format numai din consoane
        print("Datele de intrare corespund restricțiilor impuse.")
        print("Cel mai lung subșir format numai din consoane este:", cel_mai_mare_sir)  # afișăm rezultatul
    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")