2999 - Trim

From Bitnami MediaWiki

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 ⩽ krn 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ă
  1. 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]]
  1. afișăm numărul de submulțimi cu cardinal par
   print("Numărul de submulțimi cu cardinal par este:", submultimi_pare)
  1. 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>