0966 - X Min: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: Sursă: [https://www.pbinfo.ro/probleme/966/xmin] == 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'...
 
No edit summary
 
Line 14: Line 14:
Programul citește de la tastatură numerele '''K X''', numărul '''X''' fiind format din '''K''' cifre.
Programul citește de la tastatură numerele '''K X''', numărul '''X''' fiind format din '''K''' cifre.
== Date de ieșire ==
== Date de ieșire ==
Programul va afișa pe ecran un număr natural de '''K''' cifre reprezentând elementul primar al mulțimii '''M'''.
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 ==
== Restricții și precizări ==
* '''1 ≤ K ≤ 33'''
* '''1 ≤ K ≤ 33'''
* toate cifrele lui '''X''' sunt nenule
* toate cifrele lui '''X''' sunt nenule
== Exemplu ==
== Exemple ==
=== Exemplu 1 ===
; Intrare
; Intrare
: 3
: 3
Line 24: Line 25:
; Ieșire
; Ieșire
: 223
: 223
=== Exemplu 2 ===
; Intrare
: 36
; Ieșire
: Datele nu sunt comform restricțiilor impuse
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line="1">
<syntaxhighlight lang="python" line="1">
k = int(input("Numărul de cifre: "))
def citeste_k():
n = input("Numărul: ").strip() # adaugam metoda .strip() pentru a elimina spațiile inutile din jurul numărului
    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()
 


sum = 0
def elementul_primar(k):
for c in n:
    x = int(input("Introduceti numarul : "))
    if c.isdigit(): # adaugam verificarea pentru a ignora caracterele care nu sunt cifre
    sum = 0
        sum += int(c)
    for c in str(x):
        if c.isdigit():
            sum += int(c)


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


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


print(''.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>
</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.

Latest revision as of 18:05, 3 April 2023

Sursă: [1]

Enunț[edit | edit source]

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ță[edit | edit source]

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[edit | edit source]

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

Date de ieșire[edit | edit source]

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[edit | edit source]

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

Exemple[edit | edit source]

Exemplu 1[edit | edit source]

Intrare
3
124
Ieșire
223

Exemplu 2[edit | edit source]

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

Rezolvare[edit | edit source]

<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[edit | edit source]

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.