0966 - X Min

De la Universitas MediaWiki

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.