2748 - Patrula 3

From Bitnami MediaWiki
Revision as of 13:17, 6 April 2023 by Robert Manc (talk | contribs) (Pagină nouă: == Cerinţa == Un domeniu pătrat (cu albastru), ca cel din figură trebuie apărat. Domeniul e împărțit în pătrățele. Latura domeniului este de n pătrățele, n≥7. Pe culoarele colorate patrulează 3 soldați, care încep patrularea din colțul stânga sus în același moment (poziția inițială). În exemplul de mai jos avem n=9. Cei 3 soldați (garda) se vor schimba cu alți 3 soldați în momentul în care ajung în poziția inițială, simultan. Soldații patr...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa

Un domeniu pătrat (cu albastru), ca cel din figură trebuie apărat. Domeniul e împărțit în pătrățele. Latura domeniului este de n pătrățele, n≥7. Pe culoarele colorate patrulează 3 soldați, care încep patrularea din colțul stânga sus în același moment (poziția inițială). În exemplul de mai jos avem n=9. Cei 3 soldați (garda) se vor schimba cu alți 3 soldați în momentul în care ajung în poziția inițială, simultan. Soldații patrulează în sensul acelor de ceasornic fiecare cu aceeași viteză constantă, și fiecare pe culoarul său. Să se scrie un program care determină numărul de circuite complete pentru fiecare soldat (un circuit complet este făcut de un soldat oarecare, pe același culoar până ajunge în poziția inițială), pentru schimbarea gărzii.

Date de intrare

Programul citește de la tastatură numărul n.

Date de ieşire

Programul va afișa pe ecran numerele circuit1, circuit2 și circuit3 reprezentând numărul de circuite complete pe care le face fiecare soldat.

Restricții și precizări

  • n ∈ Ν
  • 7 ⩽ n ⩽ 1.000

Exemplu1

Intrare
9
Ieșire
Datele introduse corespund restricțiilor impuse.
3 4 6

Explicație

Primul soldat face 3 ture complete, al doilea 4, iar cel de-al treilea 6.

Exemplu2

Intrare
14
Ieșire
Datele introduse corespund restricțiilor impuse.
99 117 143

Explicație

Primul soldat face 99 ture complete, al doilea 117, iar cel de-al treilea 143.

Rezolvare

<syntaxhighlight lang="python" line> def validare_date(n):

   if 7 <= int(n) <= 1_000:
       return True
   return False


def cmmdc(numar1, numar2):

   while numar2:
       r = numar1 % numar2
       numar1 = numar2
       numar2 = r
   return numar1


def cmmmc(numar1, numar2):

   return numar1 * numar2 // cmmdc(numar1, numar2)


def patrula(n):

   circuit1 = n * 2 + (n - 2) * 2
   n -= 2
   circuit2 = n * 2 + (n - 2) * 2
   n -= 2
   circuit3 = n * 2 + (n - 2) * 2
   circuit4 = cmmmc(circuit1, circuit2)
   rez = cmmmc(circuit3, circuit4)
   circuit1 = rez // circuit1
   circuit2 = rez // circuit2
   circuit3 = rez // circuit3
   print(circuit1, circuit2, circuit3)


if __name__ == '__main__':

   n = int(input())
   if validare_date(n):
       print("\nDatele de intrare corespund restrictiilor impuse.\n")
       patrula(n)
   else:
       print("Datele de intrare nu corespund restrictiilor impuse.")

</syntaxhighlight>