2999 - Trim
Cerință
Scrieți un program care citește de la tastatură trei numere naturale n, k și r și afișează:
- câte submulțimi sunt formate dintr-un număr de elemente pare (cardinalul submulțimilor este un număr par)
- media aritmetică a elementelor din submulțimile cu număr de ordine k și r (0 < k ≤ r ≤ 100)
- elementele submulțimii r sub forma: primul, al doilea, ultimul, al treilea, al patrulea, penultimul, etc.
Date de intrare
Programul va citi de la tastatură n, k și r numere naturale.
Date de ieșire
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." Se afișează fiecare pe câte o linie:
- numărul de submulțimi cu număr de elemente pare
- media aritmetică a numerelor din submulțimile k și r
- elementele submulțimii r sub forma: primul, al doilea, ultimul, al treilea, al patrulea, penultimul, etc.
În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse."
Restricții de precizări
- 1 ⩽ k ⩽ r ⩽ n 100
Exemplul 1
- Intrare
- 10
- 5
- 7
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- 5
- 19
- 21 22 27 23 24 26 25
Rezolvare ver. 1
<syntaxhighlight lang="python" line="1" start="1"> def validare(n, k ,r):
return n.isdigit() and 1 <= int(n), int(k), int(r) <= 100
def submultimi(n, k, r):
submultimi_pare = 0 # inițializăm numărul de submulțimi cu cardinal par cu 0 suma_k = 0 # inițializăm suma elementelor din submulțimea k cu 0 suma_r = 0 # inițializăm suma elementelor din submulțimea r cu 0 elemente_r = [] # inițializăm lista de elemente a submulțimii r cu o listă goală
- Generăm toate submulțimile folosind bitwise shifting
for i in range(2**n):
submultime = [] # inițializăm o submulțime goală for j in range(n): if (i >> j) & 1: # verificăm dacă j este inclus în submulțime submultime.append(j+1) # dacă da, adăugăm j+1 la submulțime
if len(submultime) % 2 == 0: # verificăm dacă submulțimea are cardinal par submultimi_pare += 1 # dacă da, adăugăm 1 la numărul de submulțimi cu cardinal par
# dacă numărul de ordine k coincide cu numărul de submulțimi cu cardinal par if submultimi_pare == k: for elem in submultime: suma_k += elem # adunăm fiecare element din submulțimea k la suma_k
# dacă numărul de ordine r coincide cu numărul de submulțimi cu cardinal par if submultimi_pare == r: for elem in submultime: suma_r += elem # adunăm fiecare element din submulțimea r la suma_r # salvăm primul, al doilea, ultimul, al treilea, al patrulea și penultimul element din submulțimea r elemente_r = [submultime[0], submultime[1], submultime[-1], submultime[2], submultime[3], submultime[-2]]
- afișăm numărul de submulțimi cu cardinal par
print("Numărul de submulțimi cu cardinal par este:", submultimi_pare)
- dacă k și r sunt mai mici sau egale decât numărul de submulțimi cu cardinal par, afișăm media elementelor din submulțimea k și r și elementele submulțimii r
if k <= submultimi_pare and r <= submultimi_pare:
media_k = suma_k / len(elemente_r) media_r = suma_r / len(elemente_r) print("Media aritmetică a elementelor din submulțimea k este:", media_k) print("Media aritmetică a elementelor din submulțimea r este:", media_r) print("Elementele submulțimii r sunt:")
for elem in elemente_r:
print(elem)
else:
print("Nu există suficiente submulțimi cu cardinal par pentru a calcula media sau elementele submulțimii r.")
if __name__ == "__main__":
n = int(input("Introduceți numărul n: ")) k = int(input("Introduceți numărul k: ")) r = int(input("Introduceți numărul r: ")) if validare(n, k, r): n = int(n) k = int(k) r = int(r) print("Datele introduse corespund restricțiilor impuse.") submultimi(n, k, r)
else: print("Datele introduse nu corespund restricțiilor impuse.")
</syntaxhighlight>