Cerința
Avem la dispoziție un chenar dreptunghiular format din oglinzi. O rază de lumină pornește din colțul stânga jos al dreptunghiului sub un unghi de 45 de grade față de latura de jos a dreptunghiului și lovește latura de sus sau latura din dreapta. Aici se reflectă (pornește spre o altă latură tot sub un unghi de 45 de grade față de latura de care s-a lovit). Își continuă drumul până când ajunge într-un colț al dreptunghiului.



Date de intrare
Programul citește de la tastatură dimensiunile chenarului a și b.

Date de ieșire
Programul va afișa pe ecran numărul de atingeri ale marginilor chenarului. Punctul de pornire și cel final nu se numără.

Restricții și precizări
1 ≤ a ≤ 2000000000
1 ≤ b ≤ 2000000000
Exemple:
Intrare

3 8
Ieșire

9
Intrare

8 4
Ieșire

1
As vrea sa ma ajute cineva sa-mi completeze codul imi da 88%.

#include
using namespace std;
//determina cmmdc a 2 numere a si b
int cmmdc(long int a, long int b){
if ((a == b) && (a == 0)){
return 1;
}
if (a * b == 0){
return a + b;
}
while (a != b){
if (a > b)
a -= b;
else
b -= a;
}
return a;
}
// calcularea numărului de schimbări de direcție a razei
int raza(long int a, long int b){
int nrSchimb;
int d = cmmdc(a, b);
nrSchimb = b / d + a / d - 2;
return nrSchimb;
}
int main()
{
long int a,b;
cin>>a>>b;
cout< }


Răspuns :

#include <iostream>

using namespace std;

int main()

{

   long long a, b, d, schimb, m, c;

   cin >> a >> b;

   if (a==b) schimb=0;

   else

   {

       if (a<b) { int t=a; a=b; b=t;}

       d=a; m=b;

      while (m) {

       c = d % m;

       d = m;

       m = c;

   }

       schimb=b/d+a/d-2;

   }

   cout << schimb;

   return 0;

}

Vă mulțumim că ați vizitat platforma noastră dedicată Informatică. Ne bucurăm dacă informațiile v-au fost de ajutor. Dacă aveți întrebări suplimentare sau aveți nevoie de asistență, nu ezitați să ne contactați. Revenirea dumneavoastră ne-ar onora, așa că nu uitați să ne adăugați la favorite!


RO Lesson: Alte intrebari