0966 - X Min: Difference between revisions
MiclausIoana (talk | contribs) 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'... |
MiclausIoana (talk | contribs) 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(" | 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() | |||
sum = 0 | def elementul_primar(k): | ||
for c in | x = int(input("Introduceti numarul : ")) | ||
sum = 0 | |||
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 | |||
sum -= a[poz] | |||
poz += 1 | |||
k -= 1 | |||
a = a[1:poz] | a = a[1:poz] | ||
a.sort() | 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> | </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.