3284 - Calc Par Impar: Diferență între versiuni

De la Universitas MediaWiki
(Pagină nouă: Sursă: [https://www.pbinfo.ro/probleme/3284/calcparimpar] == Cerință == Se dau '''n''' numere naturale. Considerăm poziţiile lor numerotate de la '''1''' la '''n'''. Să se determine cea mai mare valoare memorată pe o poziţie pară şi cea mai mică valoare de două cifre aflată pe o poziţie impară. == Date de intrare == Programul citește de la tastatură numărul '''n''', iar apoi '''n''' numere naturale, separate prin spații. == Date de ieșire == Programul va a...)
 
Fără descriere a modificării
Linia 19: Linia 19:
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line="1">
<syntaxhighlight lang="python" line="1">
def citeste_n():
    while True:
        try:
            n = int(input("Introduceti numarul de valori: "))
            if n >= 2 and n <= 20:
                print("Datele sunt corecte.")
                return n
            else:
                print("Numarul de valori trebuie sa fie intre 2 si 20.")
        except ValueError:
            print("Trebuie introduse doar numere intregi.")
def citeste_valori(n):
    valori = []
    for i in range(n):
        while True:
            try:
                valoare = int(input("Introduceti o valoare: "))
                if valoare >= 1 and valoare <= 1000000000 :
                    print("Datele sunt corecte.")
                    valori.append(valoare)
                    break
                else:
                    print("Valoarea trebuie sa fie intre 1 si 1.000.000.000.")
            except ValueError:
                print("Trebuie introduse doar valori naturale.")
    return valori
def calcParImpar(valori):
    max_par = -1
    min_impar = 100
    for i in range(1, len(valori) + 1):
        x = valori[i - 1]
        if i % 2 == 0:
            if x > max_par:
                max_par = x
        else:
            if nrcif(x) == 2 and x < min_impar:
                min_impar = x
    if max_par == -1:
        print("-1", end=" ")
    else:
        print(max_par, end=" ")
    if min_impar == 100:
        print("-1")
    else:
        print(min_impar)
def nrcif(n):
def nrcif(n):
     cnt = 0
     cnt = 0
Linia 26: Linia 76:
     return cnt
     return cnt


n = int(input("Introduceți numărul de valori: " ))
if _name_ == '_main_':
max_par = -1
     n = citeste_n()
min_impar = 100
     valori = citeste_valori(n)
for i in range(1, n+1):
     calcParImpar(valori)
     x = int(input("Introduceți o valoare: "))
     
     if i % 2 == 0:
        if x > max_par:
            max_par = x
    else:
        if nrcif(x) == 2 and x < min_impar:
            min_impar = x
 
if max_par == -1:
     print("-1")
else:
    print(max_par, end=" ")
    if min_impar == 100:
        print("-1")
    else:
        print(min_impar)
</syntaxhighlight>
</syntaxhighlight>

Versiunea de la data 22 aprilie 2023 16:57

Sursă: [1]

Cerință

Se dau n numere naturale. Considerăm poziţiile lor numerotate de la 1 la n. Să se determine cea mai mare valoare memorată pe o poziţie pară şi cea mai mică valoare de două cifre aflată pe o poziţie impară.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații.

Date de ieșire

Programul va afișa pe ecran numerele x şi y, pe același rând și separate prin spațiu, reprezentând, în ordine, cele două valori calculate. În cazul în care nu sunt valori de două cifre pe poziții impare se va afișa -1 în contul valorii y.

Restricții și precizări

  • 2 ≤ n ≤ 20
  • cele n numere citite vor fi mai mici decât 1.000.000.000

Exemplu

Intrare
5
1 3 3 4 8
Ieșire
4 -1

Rezolvare

def citeste_n():
    while True:
        try:
            n = int(input("Introduceti numarul de valori: "))
            if n >= 2 and n <= 20:
                print("Datele sunt corecte.")
                return n
            else:
                print("Numarul de valori trebuie sa fie intre 2 si 20.")
        except ValueError:
            print("Trebuie introduse doar numere intregi.")

def citeste_valori(n):
    valori = []
    for i in range(n):
        while True:
            try:
                valoare = int(input("Introduceti o valoare: "))
                if valoare >= 1 and valoare <= 1000000000 :
                    print("Datele sunt corecte.")
                    valori.append(valoare)
                    break
                else:
                    print("Valoarea trebuie sa fie intre 1 si 1.000.000.000.")
            except ValueError:
                print("Trebuie introduse doar valori naturale.")

    return valori

def calcParImpar(valori):
    max_par = -1
    min_impar = 100
    for i in range(1, len(valori) + 1):
        x = valori[i - 1]
        if i % 2 == 0:
            if x > max_par:
                max_par = x
        else:
            if nrcif(x) == 2 and x < min_impar:
                min_impar = x

    if max_par == -1:
        print("-1", end=" ")
    else:
        print(max_par, end=" ")
    if min_impar == 100:
        print("-1")
    else:
        print(min_impar)

def nrcif(n):
    cnt = 0
    while n:
        n //= 10
        cnt += 1
    return cnt

if _name_ == '_main_':
    n = citeste_n()
    valori = citeste_valori(n)
    calcParImpar(valori)