2804 - Strncat: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: ==Cerința== Pentru un cuvânt format din litere mici ale alfabetului englez s și un număr natural x mai mic sau egal cu lungimea cuvântului, definim următoarea operație: *dacă x este par, la s se vor adăuga primele sale x litere, în ordinea din șir; *dacă x este impar, la s se vor adăuga primele sale x litere, în ordinea inversă din șir. Se dă un cuvânt s și un șir de n numere naturale x[1], x[2], …, x[n]. Se aplică succesiv operația definită mai sus...
 
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 29: Line 29:
: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">
#2804 - Strncat
#2804 - Strncat
def operatie(s, x):
def strncat(s, x):
     # verifica daca x este par
     # verifica daca x este par
     if x % 2 == 0:
     if x % 2 == 0:
Line 41: Line 41:
     return s
     return s


def main():
if __name__ == "__main__":
     # citeste cuvantul
     # citeste cuvantul
     s = input("Introduceți cuvântul: ")
     s = input("Introduceți cuvântul: ")
Line 48: Line 48:
     # citeste lista de numere
     # citeste lista de numere
     x = list(map(int, input("Introduceți numerele: ").split()))
     x = list(map(int, input("Introduceți numerele: ").split()))
   
 
     # verificarea dimensiunii listei x
     # verificarea restricțiilor
     if len(x) != n:
     if n >= 1 and n <= 1000 and len(s) <= 1000 and all(i <= 1000 for i in x):
        # parcurge lista de numere si aplica fiecare operatie pe rand
        for i in x:
            s = strncat(s, i)
        print(s)
        print("Datele de intrare corespund restricțiilor impuse.")
    else:
         print("Datele de intrare nu corespund restricțiilor impuse.")
         print("Datele de intrare nu corespund restricțiilor impuse.")
        return
   
    # parcurge lista de numere si aplica fiecare operatie pe rand
    for i in x:
        # verificarea restricțiilor
        if n >= 1 and n <= 1000 and len(s) <= 1000 and i <= 1000:
            s = operatie(s, i)
        else:
            print("Datele de intrare nu corespund restricțiilor impuse.")
            return
    # afiseaza cuvantul rezultat
    print("Cuvântul este:", s)
    print("Datele de intrare corespund restricțiilor impuse.")
if __name__ == "__main__":
    main()
 
</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 10:23, 21 May 2023

Cerința[edit | edit source]

Pentru un cuvânt format din litere mici ale alfabetului englez s și un număr natural x mai mic sau egal cu lungimea cuvântului, definim următoarea operație:

  • dacă x este par, la s se vor adăuga primele sale x litere, în ordinea din șir;
  • dacă x este impar, la s se vor adăuga primele sale x litere, în ordinea inversă din șir.

Se dă un cuvânt s și un șir de n numere naturale x[1], x[2], …, x[n]. Se aplică succesiv operația definită mai sus între șirul s și numerele din șir, în ordinea acestora. Afișați șirul s după aplicarea acestor operații.

Date de intrare[edit | edit source]

Programul citește de la tastatură cuvântul s, numărul n și cele n elemente ale șirului.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran cuvântul rezultat.

Restricții și precizări[edit | edit source]

  • lungimea inițială a cuvântului este de cel mult 1000 de caractere;
  • 1 ≤ n ≤ 1000;
  • fiecare element al șirului dat va fi mai mic sau egal cu minimul dintre 1000 și lungimea curentă a șirului s;

Exemplul 1[edit | edit source]

Intrare
alina
3
4 3 2
Ieșire
Datele de intrare corespund restricțiilor impuse.
alinaalinilaal

Exemplul 2[edit | edit source]

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

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1">

  1. 2804 - Strncat

def strncat(s, x):

   # verifica daca x este par
   if x % 2 == 0:
       # adauga primele x caractere din s la sfarsitul lui s
       s += s[:x]
   else:
       # adauga primele x caractere din s, dar inversate, la sfarsitul lui s
       s += s[:x][::-1]
   return s

if __name__ == "__main__":

   # citeste cuvantul
   s = input("Introduceți cuvântul: ")
   # citeste numarul de operatii
   n = int(input("Introduceți numărul de operații: "))
   # citeste lista de numere
   x = list(map(int, input("Introduceți numerele: ").split()))
   # verificarea restricțiilor
   if n >= 1 and n <= 1000 and len(s) <= 1000 and all(i <= 1000 for i in x):
       # parcurge lista de numere si aplica fiecare operatie pe rand
       for i in x:
           s = strncat(s, i)
       print(s)
       print("Datele de intrare corespund restricțiilor impuse.")
   else:
       print("Datele de intrare nu corespund restricțiilor impuse.")

</syntaxhighlight>