3284 - Calc Par Impar

De la Universitas MediaWiki

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)

Explicații

Acest cod este o implementare a unei probleme care primește un număr n de valori și apoi n valori naturale. Scopul este să se calculeze valoarea maximă pară dintre toate pozițiile pare și valoarea minimă impară care are exact două cifre în reprezentarea sa.
Funcția citeste_n() primește numărul de valori de la utilizator și se asigură că această valoare este între 2 și 20. Funcția returnează această valoare n.
Funcția citeste_valori(n) citește n valori de la utilizator și se asigură că fiecare valoare este între 1 și 1.000.000.000. Aceste valori sunt adăugate într-o listă și această listă este returnată.
Funcția calcParImpar(valori) calculează valoarea maximă pară dintre toate pozițiile pare și valoarea minimă impară care are exact două cifre în reprezentarea sa. Pentru a face acest lucru, funcția parcurge toate valorile din lista și verifică dacă poziția este pară sau impară. Dacă poziția este pară, atunci valoarea este verificată și, dacă este pară și mai mare decât valoarea maximă pară curentă, atunci valoarea devine noua valoare maximă pară. Dacă poziția este impară, atunci valoarea este verificată și, dacă are exact două cifre și este mai mică decât valoarea minimă impară curentă, atunci valoarea devine noua valoare minimă impară.
Funcția nrcif(n) primește o valoare întreagă și returnează numărul de cifre din reprezentarea acelei valori.
În funcția principală, citeste_n() și citeste_valori(n) sunt apelate pentru a citi valorile de la utilizator, apoi calcParImpar(valori) este apelată pentru a calcula valorile dorite.