0996 - Div 3: Difference between revisions

From Bitnami MediaWiki
No edit summary
Tag: visualeditor
No edit summary
Tag: visualeditor
 
(2 intermediate revisions by 2 users not shown)
Line 4: Line 4:
Pe prima linie a fişierului div3.in se află numărul '''n''', iar pe a doua linie '''n numere naturale'''.
Pe prima linie a fişierului div3.in se află numărul '''n''', iar pe a doua linie '''n numere naturale'''.
== Date de ieșire ==
== Date de ieșire ==
Pe prima linie a fişierului div3.out se vor afla elementele şirului dat pentru care suma cifrelor este divizibilă cu 3, separate printr-un spațiu.
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." Pe prima linie a fişierului div3.out se vor afla elementele şirului dat pentru care suma cifrelor este divizibilă cu 3, separate printr-un spațiu. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse."
 
== Restricții de precizări ==
== Restricții de precizări ==
*1 ⩽ '''n''' ⩽ 1000
*1 ⩽ '''n''' ⩽ 1000
Line 18: Line 19:
; Intrare
; Intrare
: 5
: 5
: 12 34 56 78 90
: 124 51 abc 7 24
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: Datele introduse nu corespund restricțiilor impuse.
: 12 90
== Rezolvare ver. 1 ==
== Rezolvare ver. 1 ==
<syntaxhighlight lang="python" line="1" start="1">
<syntaxhighlight lang="python" line="1" start="1">
def validare(n, numere):
def validare(n, numere):
     return all.isdigit() and 1 <= int(n), int(numere) <= 1000
    # Verifica daca datele de intrare sunt valide conform cerintei problemei.
    # Verifica daca n este un numar intreg pozitiv
    # si daca toate numerele din lista numere sunt numere intregi pozitive.
     return n.isdigit() and all(x.isdigit() for x in numere) and 1 <= int(n) <= 1000




def suma_cifre(n, numere):
def suma_cifre(n, numere):
     suma = 0
     # Calculeaza suma cifrelor pentru fiecare numar din lista numere,
     while n > 0:
     # si retine doar numerele pentru care suma cifrelor este divizibila cu 3.
        suma += n % 10  # adăugăm cifra unităţilor la suma cifrelor
    suma_div3 = []
        n //= 10  # eliminăm cifra unităţilor
     for x in numere:
    return suma
         if sum(int(d) for d in str(x)) % 3 == 0:
 
             suma_div3.append(x)
     for x in numere: # parcurgem şirul de numere
    return suma_div3
         if suma_cifre(x) % 3 == 0: # verificăm dacă suma cifrelor este divizibilă cu 3
             print(x) # afişăm numărul dacă este divizibil cu 3




if __name__ == "__main__":
if __name__ == "__main__":
     n = int(input())  # citim numărul n
     with open("div3.in", "r") as fin:
    numere = list(map(int, input().split()))  # citim şirul de numere
        n = fin.readline().strip()  # Citeste numarul de elemente din sir
 
        numere = fin.readline().strip().split()  # Citeste lista de numere


if validare(n, numere):
    if validare(n, numere):
    n = int(n)
        n = int(n) # Converteste n la integer
    numere = int(numere)
        numere = list(map(int, numere))  # Converteste lista de numere la integers


    print("Datele introduse corespund restricțiilor impuse.")
        print("Datele introduse corespund restricțiilor impuse.")
    suma_cifre(n, numere)
        suma_div3 = suma_cifre(n, numere)  # Calculeaza suma_div3
        with open("div3.out", "w") as fout:
            fout.write(" ".join(map(str, suma_div3)))  # Scrie numerele in fisierul de iesire
            fout.write("\n")
    else:
        print("Datele introduse nu corespund restricțiilor impuse.")


else:
    print("Datele introduse nu corespund restricțiilor impuse.")


</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 13:14, 26 April 2023

Cerință[edit]

Pe prima linie a fişierului div3.in se află numărul n, iar pe a doua linie n numere naturale.

Date de intrare[edit]

Pe prima linie a fişierului div3.in se află numărul n, iar pe a doua linie n numere naturale.

Date de ieșire[edit]

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." Pe prima linie a fişierului div3.out se vor afla elementele şirului dat pentru care suma cifrelor este divizibilă cu 3, separate printr-un spațiu. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse."

Restricții de precizări[edit]

  • 1 ⩽ n ⩽ 1000
  • elementele şirului vor avea cel mult 9 cifre

Exemplul 1[edit]

Intrare
7
124 51 231 7 24 31 5
Ieșire
Datele introduse corespund restricțiilor impuse.
51 231 24

Exemplul 2[edit]

Intrare
5
124 51 abc 7 24
Ieșire
Datele introduse nu corespund restricțiilor impuse.

Rezolvare ver. 1[edit]

<syntaxhighlight lang="python" line="1" start="1"> def validare(n, numere):

   # Verifica daca datele de intrare sunt valide conform cerintei problemei.
   # Verifica daca n este un numar intreg pozitiv
   # si daca toate numerele din lista numere sunt numere intregi pozitive.
   return n.isdigit() and all(x.isdigit() for x in numere) and 1 <= int(n) <= 1000


def suma_cifre(n, numere):

   # Calculeaza suma cifrelor pentru fiecare numar din lista numere,
   # si retine doar numerele pentru care suma cifrelor este divizibila cu 3.
   suma_div3 = []
   for x in numere:
       if sum(int(d) for d in str(x)) % 3 == 0:
           suma_div3.append(x)
   return suma_div3


if __name__ == "__main__":

   with open("div3.in", "r") as fin:
       n = fin.readline().strip()  # Citeste numarul de elemente din sir
       numere = fin.readline().strip().split()  # Citeste lista de numere
   if validare(n, numere):
       n = int(n)  # Converteste n la integer
       numere = list(map(int, numere))  # Converteste lista de numere la integers
       print("Datele introduse corespund restricțiilor impuse.")
       suma_div3 = suma_cifre(n, numere)  # Calculeaza suma_div3
       with open("div3.out", "w") as fout:
           fout.write(" ".join(map(str, suma_div3)))  # Scrie numerele in fisierul de iesire
           fout.write("\n")
   else:
       print("Datele introduse nu corespund restricțiilor impuse.")


</syntaxhighlight>