4280 - Max Div K

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

Sursă: [1]

Cerință[edit | edit source]

Se citesc de la tastatură numerele n k, apoi un șir de n numere naturale. Să se determine cel mai mare număr din șir care se divide cu k.

Date de intrare[edit | edit source]

Programul citește de la tastatură numerele n k, apoi n numere naturale.

Date de ieșire[edit | edit source]

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.". Programul afișează pe prima ecran M, cel mai mare număr din șir care se divide cu k. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".

Restricții și precizări[edit | edit source]

  • n ≤ 50
  • numerele citite vor fi mai mici decât 10000
  • k > 0
  • dacă șirul nu conține niciun număr divizibil cu k, se va afișa mesajul NU EXISTA

Exemple[edit | edit source]

Exemplu 1[edit | edit source]

Date de intrare
4 3
104 63 24 5
Date de ieșire
63

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1"> def citeste_n_k():

   while True:
       try:
           n = int(input("Introduceti numarul de elemente: "))
           k = int(input("Introduceti numarul k: "))
           if n <= 50 and k > 0:
               print("Datele sunt corecte.")
               return n, k
           else:
               print("Datele nu sunt conform restrictiilor impuse.")
       except ValueError:
           print("Trebuie introduse doar numere intregi.")


def citeste_valori(n):

   valori = []
   for i in range(n):
       while True:
           try:
               valoare = int(input(f"Introduceti valoarea {i+1}: "))
               if valoare < 10000:
                   print("Datele sunt corecte.")
                   valori.append(valoare)
                   break
               else:
                   print("Valoarea trebuie sa fie mai mica decat 10000.")
           except ValueError:
               print("Trebuie introduse doar valori naturale.")
   return valori


def Max_Div_K(valori, k):

   max_divisible = -1
   for num in valori:
       if num % k == 0 and num > max_divisible:
           max_divisible = num
   if max_divisible == -1:
       print("NU EXISTA")
   else:
       print("Cel mai mare numar din sir care se divide cu k este:", max_divisible)


if _name_ == '_main_':

   n, k = citeste_n_k()
   valori = citeste_valori(n)

</syntaxhighlight>

Explicatie[edit | edit source]

Acest cod este o implementare Python a unui program care citeste un numar n si un numar k, apoi citeste o lista de n numere si afiseaza cel mai mare numar din lista care se divide exact cu k. Programul este impartit in trei functii:
citeste_n_k() - Aceasta functie primeste de la utilizator numerele n si k si verifica daca acestea respecta anumite restrictii impuse. Daca valorile introduse sunt corecte, functia returneaza valorile n si k.
citeste_valori(n) - Aceasta functie citeste n numere de la utilizator si verifica daca fiecare numar introdus este mai mic decat 10000. Daca numarul introdus este corect, acesta este adaugat intr-o lista. Lista cu valorile introduse este returnata la sfarsitul functiei.
Max_Div_K(valori, k) - Aceasta functie primeste lista cu valorile introduse si numarul k. Functia itereaza prin lista de numere si gaseste cel mai mare numar care se divide exact cu k. Daca un astfel de numar nu exista in lista, functia afiseaza "NU EXISTA". Daca un astfel de numar exista in lista, functia afiseaza numarul respectiv.
Functiile sunt apelate in if _name_ == '_main_': pentru a porni programul. Mai intai, sunt citite numerele n si k folosind citeste_n_k(). Apoi, valorile introduse de utilizator sunt citite folosind citeste_valori(n), si apoi functia Max_Div_