Informatică, întrebare adresată de pmarian98, 8 ani în urmă


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ăspunsuri la întrebare

Răspuns de boiustef
6

#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;

}


pmarian98: esti GENIAL
boiustef: nu prea ...
boiustef: la aceste date tr sa intelegi ca e necesar tipul long long si nu int sau long int. Sa stii ca long int este echivalent cu int ....
boiustef: si cu varianta ta de euclid luam 2 teste cu depasiri de timp, iar cu varianta mea de euclid am evitat depasirea...
boiustef: salut.. am vazut postarea ta ieri, 21.12.2018 multimi2 si azi nu o gasesc ca sa postez raspunsul ....
enuntul ei incepea astfel:
David a învățat de curând la școală ce înseamnă o mulțime de numere naturale și ce operații se pot face pe mulțimi. Printre operațiile învățate, lui David i s-au părut interesante operația de reuniune a două mulțimi și operația de intersecție a două mulțimi, așa că el, fiind pasionat de informatică, s-a gândit să implementeze cele două operații pentru două mulțimi.
boiustef: am gasit-o ... , dar vad este raspunsul dat in c#. Daca vrei raspuns in C++ cu 100 pnct teatata pe pbinfo posteaza inca odata problema...
Alte întrebări interesante