1912 - Becuri

From Bitnami MediaWiki

Cerința[edit | edit source]

Chris vă propune un joc cu becuri.

  • în joc sunt n becuri
  • inițial toate cele n becuri au culoarea albastru
  • fiecare bec poate avea doar două culori: roșu sau albastru
  • se efectuează n parcurgeri, pentru k de la 1 la n. La parcurgerea de rang k, se schimbă culoarea fiecărui bec situat pe poziţii având indicii multipli de k, din roşu în albastru şi invers.

Știind numărul n de becuri, să se afișeze numărul de becuri care au culoarea roșie după terminarea jocului.

Date de intrare[edit | edit source]

Fișierul de intrare becuriin.txt conține pe prima linie numărul de becuri n.

Date de ieșire[edit | edit source]

Fișierul de ieșire becuriout.txt va conține pe prima linie numărul de becuri care au culoarea roșie după terminarea jocului.

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

  • numerotarea pozițiilor becurilor începe cu 1
  • 1 ⩽ n ⩽ 10^9

Exemplul 1[edit | edit source]

Intrare
becuriin.txt
6
Ieșire
Datele de intrare corespund restricțiilor impuse
becuriout.txt
2

Exemplul 2[edit | edit source]

Intrare
becuriin.txt
10
Ieșire
Datele de intrare corespund restricțiilor impuse
becuriout.txt
3

Exemplul 3[edit | edit source]

Intrare
becuriin.txt
18
Ieșire
Datele de intrare corespund restricțiilor impuse
becuriout.txt
4

Exemplul 4[edit | edit source]

Intrare
becuriin.txt
0
Ieșire
Datele de intrare NU corespund restricțiilor impuse

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 1912 - Becuri

def validare_date(n):

   if not (1 <= n <= 10**9):
       return False
   return True


def numar_becuri_rosii(n):

   becuri = [0] * (n + 1)
   for k in range(1, n + 1):
       for i in range(k, n + 1, k):
           becuri[i] = 1 - becuri[i]
   return sum(becuri)


with open("becuriin.txt", "r") as f:

   n = int(f.readline().strip())

if validare_date(n):

   print("Datele de intrare corespund restricțiilor impuse")
   rezultat = numar_becuri_rosii(n)
   with open("becuriout.txt", "w") as f:
       f.write(str(rezultat) + "\n")

else:

   print("Datele de intrare NU corespund restricțiilor impuse")
   exit(0)

</syntaxhighlight>