0493 - Constr

De la Universitas MediaWiki

Sursa: 0493 - Constr


Cerinţa

Se dă un vector x cu n elemente, numere naturale. Să se construiască un alt vector, y, cu proprietatea că y[i] este egal cu restul împărțirii lui x[i] la suma cifrelor lui x[i].

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n numere naturale, reprezentând elementele vectorului.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou afișează elementele vectorului y, separate prin exact un spațiu. În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse.".

Restricţii şi precizări

  • 1 ⩽ n ⩽ 200
  • elementele vectorului vor fi cuprinse între 1 și 1.000.000.000

Exemple

Exemplul 1

Intrare
6
50 1815 15 289 35 40
Ieșire
Datele sunt introduse corect.
0 0 3 4 3 0

Exemplul 2

Intrare
5
10 2 -3 4 5
Ieșire
Datele nu corespund restricțiilor impuse.


Rezolvare

# 0493

def construirea_vectorului_y(x, n):
    y = []
    for i in range(n):
        a, s = x[i], 0
        while a:
            s += a % 10
            a //= 10
        y.append(x[i] % s)

    for i in range(n):
        print(y[i], end=" ")


def citire_conform_restrictiilor(x, n):
    if n < 1 or n > 200:
        print("Datele nu corespund restricțiilor impuse.")
        exit()
    for elem in x:
        if elem < 0 or elem > 1000000000:
            print("Datele nu corespund restricțiilor impuse.")
            exit()
    if n != len(x):
        print("Datele nu corespund restricțiilor impuse.")
        exit()
    print("Datele sunt introduse corect.")


if __name__ == '__main__':
    n = int(input())
    x = list(map(int, input().split()))
    citire_conform_restrictiilor(x, n)
    construirea_vectorului_y(x, n)

Explicație rezolvare

   Programul începe prin definirea unei funcții numite construirea_vectorului_y(x, n), care primește două argumente: vectorul x și numărul n. În această funcție, se creează un vector gol y, în care vom adăuga ulterior elemente. Se parcurge vectorul x folosind un ciclu for. La fiecare iterație, se extrage elementul a de pe poziția i din vectorul x și se inițializează o variabilă s cu valoarea 0. Apoi, se parcurge cifrele din elementul a folosind un alt ciclu while. La fiecare iterație a acestui ciclu, se adaugă la variabila s ultima cifră a lui a, obținută prin operarea modulo 10, și se împarte a la 10, eliminându-se astfel ultima cifră. Aceasta se repetă până când a devine 0, moment în care suma cifrelor elementului a este acumulată în variabila s. Apoi, se adaugă la vectorul y valoarea a % s, care reprezintă restul împărțirii elementului a la suma cifrelor acestuia. Aceasta se realizează folosind metoda append() a listelor în Python. La final, se parcurge vectorul y și se afișează elementele pe ecran, separate prin spațiu, folosind un alt ciclu for și funcția print() cu argumentul end=" ", care specifică separatorul dintre elemente ca fiind spațiul.
În continuare, programul definește o funcție numită citire_conform_restrictiilor(x, n), care primește două argumente: vectorul x și numărul n. Această funcție verifică dacă n și elementele din vectorul x respectă anumite restricții. Dacă n este mai mic decât 1 sau mai mare decât 200, sau dacă oricare dintre elementele din vectorul x este mai mic decât 0 sau mai mare decât 1000000000, sau dacă n nu este egal cu lungimea vectorului x, atunci se afișează "Datele nu corespund restricțiilor impuse." și programul se încheie folosind funcția exit(). Dacă toate restricțiile sunt respectate, se afișează "Datele sunt introduse corect." și se continuă programul.
În secțiunea if __name__ == '__main__':, se citește numărul n de la intrare folosind funcția input() și se convertește la tipul întreg folosind int(). Apoi, se citește vectorul x de la intrare, care conține n numere întregi separate prin spațiu, și se convertește într-o listă de întregi folosind funcția map() împreună cu int() pentru a aplica conversia la fiecare element din input-ul citit. Apoi, se apelează funcția citire_conform_restrictiilor(x, n) pentru a verifica restricțiile impuse asupra datelor citite. Dacă restricțiile sunt respectate, se apelează funcția construirea_vectorului_y(x, n) pentru a construi și afișa vectorul y, conform problemei.