0966 - X Min

From Bitnami MediaWiki
Revision as of 18:05, 3 April 2023 by MiclausIoana (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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

<syntaxhighlight lang="python" line="1"> 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)

</syntaxhighlight>

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.