2748 - Patrula 3: Difference between revisions
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... |
Robert Manc (talk | contribs) No edit summary |
||
(One intermediate revision by the same user not shown) | |||
Line 15: | Line 15: | ||
: 9 | : 9 | ||
; Ieșire | ; Ieșire | ||
: Datele | : Datele de intrare corespund restricțiilor impuse. | ||
: 3 4 6 | : 3 4 6 | ||
== Explicație == | == Explicație == | ||
Line 23: | Line 23: | ||
: 14 | : 14 | ||
; Ieșire | ; Ieșire | ||
: Datele | : Datele de intrare corespund restricțiilor impuse. | ||
: 99 117 143 | : 99 117 143 | ||
== Explicație == | == Explicație == | ||
Line 70: | Line 70: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Explicație == | |||
Programul calculează numărul minim de runde pe care trebuie să le parcurgă o patrulă pentru a acoperi un poligon cu n laturi. | |||
Funcția '''cmmdc''' calculează cel mai mare divizor comun dintre două numere date. | |||
Funcția '''cmmmc''' calculează cel mai mic multiplu comun dintre două numere date. | |||
Funcția '''patrula''' calculează lungimea circuitelor pe care trebuie să le parcurgă patrula și apoi le înmulțește pentru a obține cel mai mic multiplu comun al lungimilor acestora. Astfel, se obține numărul total de unități de lungime pe care trebuie să le parcurgă patrula. Ulterior, se împarte acest număr la lungimea fiecărui circuit, obținându-se astfel numărul de runde pe care trebuie să le parcurgă patrula pe fiecare circuit. |
Latest revision as of 16:19, 28 April 2023
Cerinţa[edit | edit source]
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[edit | edit source]
Programul citește de la tastatură numărul n.
Date de ieşire[edit | edit source]
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[edit | edit source]
- n ∈ Ν
- 7 ⩽ n ⩽ 1.000
Exemplu1[edit | edit source]
- Intrare
- 9
- Ieșire
- Datele de intrare corespund restricțiilor impuse.
- 3 4 6
Explicație[edit | edit source]
Primul soldat face 3 ture complete, al doilea 4, iar cel de-al treilea 6.
Exemplu2[edit | edit source]
- Intrare
- 14
- Ieșire
- Datele de intrare corespund restricțiilor impuse.
- 99 117 143
Explicație[edit | edit source]
Primul soldat face 99 ture complete, al doilea 117, iar cel de-al treilea 143.
Rezolvare[edit | edit source]
<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>
Explicație[edit | edit source]
Programul calculează numărul minim de runde pe care trebuie să le parcurgă o patrulă pentru a acoperi un poligon cu n laturi. Funcția cmmdc calculează cel mai mare divizor comun dintre două numere date. Funcția cmmmc calculează cel mai mic multiplu comun dintre două numere date. Funcția patrula calculează lungimea circuitelor pe care trebuie să le parcurgă patrula și apoi le înmulțește pentru a obține cel mai mic multiplu comun al lungimilor acestora. Astfel, se obține numărul total de unități de lungime pe care trebuie să le parcurgă patrula. Ulterior, se împarte acest număr la lungimea fiecărui circuit, obținându-se astfel numărul de runde pe care trebuie să le parcurgă patrula pe fiecare circuit.