0966 - X Min

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Sursă: [1]

Enunț

Fie X un număr natural format din exact K cifre, toate nenule, iar S suma cifrelor lui X. Pornind de la aceste numere, se construiește mulțimea M a tuturor numerelor naturale care:

au suma cifrelor egală cu S sunt formate fiecare din exact K cifre, toate cifrele fiind nenule. Pentru fiecare număr din mulțimea M se calculează produsul cifrelor sale. Fie P valoarea maximă a produselor calculate.

Cel mai mic număr din mulțimea M care are produsul cifrelor egal cu P îl vom denumi elementul primar al mulțimii.

Cerință

Scrieţi un program care să citească numerele K și X (cu semnificația din enunț) şi care să determine elementul primar al mulțimii M.

Date de intrare

Programul citește de la tastatură numerele K X, numărul X fiind format din K cifre.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.". Programul va afișa pe ecran un număr natural de K cifre reprezentând elementul primar al mulțimii M. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".

Restricții și precizări

  • 1 ≤ K ≤ 33
  • toate cifrele lui X sunt nenule

Exemple

Exemplu 1

Intrare
3
124
Ieșire
223

Exemplu 2

Intrare
36
Ieșire
Datele nu sunt comform restricțiilor impuse

Rezolvare

def citeste_k():
    while True:
        try:
            k = int(input("Introduceti numarul de cifre: "))
            if 1<=k<=33:
                print("Datele sunt corecte.")
                return k
            else:
                print("Datele nu sunt conform restricțiilor impuse.")
                exit()
        except ValueError:
            print("Trebuie introduse doar numere intregi.")
            exit()


def elementul_primar(k):
    x = int(input("Introduceti numarul : "))
    sum = 0
    for c in str(x):
        if c.isdigit():
            sum += int(c)

    a = [0] * 101
    poz = 1
    while k:
        a[poz] = sum // k
        sum -= a[poz]
        poz += 1
        k -= 1

    a = a[1:poz]
    a.sort()
    return int(''.join(str(x) for x in a))

if __name__ == '__main__':
    k = citeste_k()
    elem_primar = elementul_primar(k)
    print("Elementul primar al mulțimii este: ", elem_primar)

Explicații

Da, acesta este un program Python care citeste de la utilizator un număr întreg k reprezentând numărul de cifre și un număr întreg x și returnează elementul primar al mulțimii, format din cifrele lui x.
Funcția citeste_k() primește input-ul utilizatorului și se asigură că este un număr întreg cuprins între 1 și 33. Dacă input-ul nu este corect, utilizatorul primește un mesaj corespunzător și programul se oprește.
Funcția elementul_primar(k) primește numărul x de la utilizator și determină cifrele sale, apoi creează o listă goală a cu o lungime de 101. Acest lucru se face pentru a putea stoca cifrele elementului primar, deoarece nu știm câte cifre va avea elementul primar în avans.
În continuare, funcția calculează suma cifrelor lui x și apoi împarte această sumă la numărul de cifre k. Rezultatul împărțirii este stocat în lista a, la poziția poz și apoi scăzut din suma totală a cifrelor lui x. Acest lucru se repetă pentru fiecare cifră a elementului primar.
După completarea listei a, aceasta este sortată și transformă într-un număr întreg folosind funcția join(). Acest număr reprezintă elementul primar al mulțimii.
În blocul if __name__ == '__main__':, programul rulează citind numărul k de la utilizator, apoi determinând elementul primar al mulțimii și afișându-l la ieșire.