2712 - Semne: Difference between revisions

From Bitnami MediaWiki
Dragos1234 (talk | contribs)
Dragos1234 (talk | contribs)
 
(12 intermediate revisions by the same user not shown)
Line 1: Line 1:
Sursa: [https://www.pbinfo.ro/probleme/56/numarareperechi]
Sursa: [https://www.pbinfo.ro/probleme/2712/semne]
== Cerinţa ==
== Cerinţa ==
Fie un număr n natural nenul, determinați un număr k și o combinație de semne '''+''' sau '''-''' (mai exact o succesiune x1,x2,…,xk unde xi∈{−1,1}, astfel încat să aibă loc relația: n=x1⋅ 1^2+ x2 ⋅ 2^2 + … + xk ⋅ k^2. Să se afișeze o succesiune de k semne + sau - care să îndeplinească relația de mai sus.
Fie un număr n natural nenul, determinați un număr k și o combinație de semne '''+''' sau '''-''' (mai exact o succesiune x1,x2,…,xk unde xi∈{−1,1}, astfel încat să aibă loc relația: '''n=x1⋅ 1^2+ x2 ⋅ 2^2 + … + xk ⋅ k^2'''. Să se afișeze o succesiune de k semne + sau - care să îndeplinească relația de mai sus.


== Date de intrare ==
== Date de intrare ==
Programul citește de la tastatură numere întregi. Citirea se încheie la introducerea valorii 0.
Programul citește de la tastatură numărul '''n'''.


== Date de ieșire ==  
== Date de ieșire ==  
Programul va afișa pe ecran, mesajul "Datele introduse corespund cerințelor" și pe o linie nouă programul afișează pe ecran numărul '''C''', reprezentând numărul de perechi citite care respectă condiția cerută. În caz contrar programul va afișa pe o linie noua mesajul "Datele introduse nu corespund cerintelor."
Programul va afișa pe ecran, mesajul "Datele introduse corespund cerințelor" și pe o linie nouă programul va afișa pe ecran o succesiune de '''k''' semne '''+''' sau '''-''' care să îndeplinească relația. În caz contrar programul va afișa pe o linie noua mesajul "Datele introduse nu corespund cerintelor."


== Restricţii şi precizări ==
== Restricţii şi precizări ==
* numerele citite aparțin intervalului '''(-1.000.000;1.000.000)'''
* 1 ⩽ '''n''' ⩽ 100
* valoarea zero, care încheie citirile, nu se va prelucra


== Exemplul 1 ==
== Exemplul 1 ==
Line 17: Line 16:
: 3
: 3
; Ieșire
; Ieșire
: Datele introduse corespund cerintelor
: -+--+
: -+--+
<br>
<br>
Line 22: Line 22:
== Exemplul 2 ==
== Exemplul 2 ==
; Intrare
; Intrare
: Introduceți primul număr: 200000000000000000000000000000000000
: 2
; Ieșire
; Ieșire
: Datele introduse nu corespund cerințelor.
: Datele introduse corespund cerintelor
: ---+
<br>
<br>


== Rezolvare ==  
== Rezolvare ==  
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#0056
#2712
def is_valid(number):
def validate_n(n):
     return -1000000 < number < 1000000 or number == 0
     if n < 1 or n > 100:
        print("Datele introduse nu corespund cerintelor.")
        return False
    return True




def get_valid_input(prompt):
def print_pattern(n):
     """
     if n % 4 == 1:
     Returnează un număr valid introdus de utilizator.
        print("+", end="")
    Prompt-ul este afișat la consolă.
     elif n % 4 == 2:
    """
        print("---+", end="")
     num = int(input(prompt))
     elif n % 4 == 3:
    while not is_valid(num):
         print("-+--+", end="")
         print("Datele introduse nu corespund cerintelor.")
        exit()
    return num


    for i in range(n // 4):
        print("+--+", end="")


def count_matching_digits():
    """
    Calculează numărul de cifre care se potrivesc în doi numere introduse de utilizator.
    """
    num1 = get_valid_input("Introduceți primul număr: ")
    num2 = get_valid_input("Introduceți al doilea număr: ")


    if num1 < 0:
if __name__ == '__main__':
        num1 = -num1
    n = int(input("Introduceti un numar: "))
     if num2 < 0:
     if validate_n(n):
         num2 = -num2
         print("Datele introduse corespund cerintelor.")
        print_pattern(n)


    count = 0
    while num2:
        if num1 % 10 == num2 % 10:
            count += 1
        num1 = num2
        num2 = get_valid_input("Introduceți următorul număr: ")
        if num2 < 0:
            num2 = -num2
   
    print("Datele corespund cerintelor.")
    print(f"Rezultat: {count}")


</syntaxhighlight>


def main():
== Explicatie rezolvare ==
    count_matching_digits()
Acest program afiseaza un model de tipar care consta intr-o serie de caractere '''+''' si '''-'''.


Functia '''validate_n''' are rolul de a verifica daca numarul "n" introdus de utilizator este cuprins intre 1 si 100. Daca nu, functia afiseaza un mesaj de eroare si returneaza valoarea booleana "False". Daca numarul este valid, functia returneaza valoarea booleana "True".


main()
Functia '''print_pattern''' afiseaza modelul de tipar. Daca numarul '''n''' impartit la 4 are restul 1, functia afiseaza '''+'''. Daca restul este 2, functia afiseaza '''---+'''. Daca restul este 3, functia afiseaza '''-+--+'''. Apoi, functia afiseaza '''+--+''' de mai multe ori, in functie de valoarea lui '''n''', impartita la 4.


 
Daca functia '''validate_n''' returneaza valoarea "True", atunci programul va apela functia '''print_pattern''' si va afisa modelul de tipar pentru numarul '''n''' introdus de utilizator.
</syntaxhighlight>
== Explicatie rezolvare ==

Latest revision as of 10:00, 29 April 2023

Sursa: [1]

Cerinţa[edit | edit source]

Fie un număr n natural nenul, determinați un număr k și o combinație de semne + sau - (mai exact o succesiune x1,x2,…,xk unde xi∈{−1,1}, astfel încat să aibă loc relația: n=x1⋅ 1^2+ x2 ⋅ 2^2 + … + xk ⋅ k^2. Să se afișeze o succesiune de k semne + sau - care să îndeplinească relația de mai sus.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran, mesajul "Datele introduse corespund cerințelor" și pe o linie nouă programul va afișa pe ecran o succesiune de k semne + sau - care să îndeplinească relația. În caz contrar programul va afișa pe o linie noua mesajul "Datele introduse nu corespund cerintelor."

Restricţii şi precizări[edit | edit source]

  • 1 ⩽ n ⩽ 100

Exemplul 1[edit | edit source]

Intrare
3
Ieșire
Datele introduse corespund cerintelor
-+--+


Exemplul 2[edit | edit source]

Intrare
2
Ieșire
Datele introduse corespund cerintelor
---+


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 2712

def validate_n(n):

   if n < 1 or n > 100:
       print("Datele introduse nu corespund cerintelor.")
       return False
   return True


def print_pattern(n):

   if n % 4 == 1:
       print("+", end="")
   elif n % 4 == 2:
       print("---+", end="")
   elif n % 4 == 3:
       print("-+--+", end="")
   for i in range(n // 4):
       print("+--+", end="")


if __name__ == '__main__':

   n = int(input("Introduceti un numar: "))
   if validate_n(n):
       print("Datele introduse corespund cerintelor.")
       print_pattern(n)


</syntaxhighlight>

Explicatie rezolvare[edit | edit source]

Acest program afiseaza un model de tipar care consta intr-o serie de caractere + si -.

Functia validate_n are rolul de a verifica daca numarul "n" introdus de utilizator este cuprins intre 1 si 100. Daca nu, functia afiseaza un mesaj de eroare si returneaza valoarea booleana "False". Daca numarul este valid, functia returneaza valoarea booleana "True".

Functia print_pattern afiseaza modelul de tipar. Daca numarul n impartit la 4 are restul 1, functia afiseaza +. Daca restul este 2, functia afiseaza ---+. Daca restul este 3, functia afiseaza -+--+. Apoi, functia afiseaza +--+ de mai multe ori, in functie de valoarea lui n, impartita la 4.

Daca functia validate_n returneaza valoarea "True", atunci programul va apela functia print_pattern si va afisa modelul de tipar pentru numarul n introdus de utilizator.