2371 - Biliard: Difference between revisions
Pagină nouă: == Cerinţa == Avem la dispoziție o masa de biliard dreptunghiulara. O bila pornește din colțul stânga jos al dreptunghiului sub un unghi de 45 grade față de latura de jos a dreptunghiului și lovește latura de sus sau latura din dreapta. Aici ricoșează (pornește spre o altă latură tot sub un unghi de 45 grade față de latura de care s-a lovit). Își continuă drumul până când ajunge într-un colț al dreptunghiului. Scrieți un program care calculează de c... |
No edit summary |
||
(One intermediate revision by one other user not shown) | |||
Line 4: | Line 4: | ||
Scrieți un program care calculează de câte ori ('''nrSchimb''') mingea își schimbă direcția de mers până când se oprește într-un colț. Punctul de pornire nu se numără. | Scrieți un program care calculează de câte ori ('''nrSchimb''') mingea își schimbă direcția de mers până când se oprește într-un colț. Punctul de pornire nu se numără. | ||
== Date de intrare == | == Date de intrare == | ||
Programul citește de la tastatură numerele ''' | Programul citește de la tastatură numerele '''a''' și '''b''' reprezentând lungimea respectiv lățimea mesei. | ||
== Date de ieşire == | == Date de ieşire == | ||
Dacă datele sunt introduse corect,pe ecran se va afișa :'''"Datele sunt introduse corect."''',apoi pe un rând nou numărul '''nrSchimb''' reprezentând valoarea cerută.În cazul contrar,se va afișa pe ecran '''"Datele nu corespund restricțiilor impuse."'''. | |||
== Restricții și precizări == | == Restricții și precizări == | ||
* 1 ⩽ | * 1 ⩽ a ⩽ b ⩽ 10.000 | ||
== Exemplu == | == Exemplu == | ||
; Intrare | ; Intrare | ||
: 8 3 | : 8 3 | ||
; Ieșire | ; Ieșire | ||
: Datele introduse | : Datele sunt introduse corect. | ||
: 9 | : 9 | ||
== Explicație == | == Explicație == | ||
Line 19: | Line 19: | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
def validare_date( | #Verificăm dacă datele introduse corespund restricțiilor impuse | ||
if 1 <= | def validare_date(a, b): | ||
if 1 <= a <= 10000 and 1 <= b <= 10000 and 1 <= min(a, b) <= max(a, b) <= 10000 and (max(a, b) - min(a, b)) <= 1000: | |||
return True | return True | ||
return False | return False | ||
def | #Calculăm cel mai mare divizor comun dintre două numere. | ||
if | def cmmdc(a, b): | ||
return | |||
return | if b == 0: | ||
return a | |||
return cmmdc(b, a % b) | |||
if __name__ == '__main__': | if __name__ == '__main__': | ||
lungime, lățime = map(int, input().split()) | |||
n, m = | n, m = lungime, lățime | ||
if validare_date( | if validare_date(lungime, lățime):#Dacă datele introduse sunt corecte | ||
divizor_comun =cmmdc(lungime, lățime) | |||
# Calculăm cel mai mic multiplu comun al numerelor "lungime" și "lățime" | |||
cmmmc = (n // divizor_comun) * m | |||
print("\nDatele sunt introduse corect.\n") | |||
print(cmmmc // lungime + cmmmc // lățime - 2) | |||
else: | else: | ||
print("Datele | print("Datele nu corespund restricțiilor impuse.") | ||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 15:44, 11 April 2023
Cerinţa[edit | edit source]
Avem la dispoziție o masa de biliard dreptunghiulara. O bila pornește din colțul stânga jos al dreptunghiului sub un unghi de 45 grade față de latura de jos a dreptunghiului și lovește latura de sus sau latura din dreapta. Aici ricoșează (pornește spre o altă latură tot sub un unghi de 45 grade față de latura de care s-a lovit). Își continuă drumul până când ajunge într-un colț al dreptunghiului.
Scrieți un program care calculează de câte ori (nrSchimb) mingea își schimbă direcția de mers până când se oprește într-un colț. Punctul de pornire nu se numără.
Date de intrare[edit | edit source]
Programul citește de la tastatură numerele a și b reprezentând lungimea respectiv lățimea mesei.
Date de ieşire[edit | edit source]
Dacă datele sunt introduse corect,pe ecran se va afișa :"Datele sunt introduse corect.",apoi pe un rând nou numărul nrSchimb reprezentând valoarea cerută.În cazul contrar,se va afișa pe ecran "Datele nu corespund restricțiilor impuse.".
Restricții și precizări[edit | edit source]
- 1 ⩽ a ⩽ b ⩽ 10.000
Exemplu[edit | edit source]
- Intrare
- 8 3
- Ieșire
- Datele sunt introduse corect.
- 9
Explicație[edit | edit source]
De 4 ori lovește latura de sus, o dată latura din stânga și din dreapta și de 3 ori latura de jos și intră în colțul dreapta-jos.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- Verificăm dacă datele introduse corespund restricțiilor impuse
def validare_date(a, b):
if 1 <= a <= 10000 and 1 <= b <= 10000 and 1 <= min(a, b) <= max(a, b) <= 10000 and (max(a, b) - min(a, b)) <= 1000: return True return False
- Calculăm cel mai mare divizor comun dintre două numere.
def cmmdc(a, b):
if b == 0: return a return cmmdc(b, a % b)
if __name__ == '__main__':
lungime, lățime = map(int, input().split()) n, m = lungime, lățime if validare_date(lungime, lățime):#Dacă datele introduse sunt corecte divizor_comun =cmmdc(lungime, lățime) # Calculăm cel mai mic multiplu comun al numerelor "lungime" și "lățime" cmmmc = (n // divizor_comun) * m print("\nDatele sunt introduse corect.\n") print(cmmmc // lungime + cmmmc // lățime - 2) else: print("Datele nu corespund restricțiilor impuse.")
</syntaxhighlight>