2008 - Bouncy Balls

= Análisis =

Problema interesante, el enunciado parece difícil e intenta confundir, pero es bueno imaginárselo como un billar circular, a pesar de haber rebotes, no hay variación de velocidad por lo que se le puede tomar como un problema de geometría, solo de cualquier punto del circulo dibujar una recta que seria el radio, luego una perpendicular a esa recta (90º), de ahí medir el ángulo que te dan en la pregunta y formar un triángulo con dos lados iguales, uno de estos lados es la primera distancia que recorre la bola, entonces con la ayuda del teorema de los senos encontrar dicho lado, como es un circulo los ángulos se repiten en los rebotes y como no hay variación de velocidad entonces la distancia se repite también, por lo que solo queda dividir la distancia total del recorrido que te da el problema entre el lado encontrado para encontrar los rebotes.

= Solución =

C++
//por Ariel using namespace std; float convertirarad(int ang){ return ang*0.0174532925199432957;} int main{ int radio,distancia,distanciaOriginal; int alfa,beta,anguloEntrada; int rebotes; int contTest=0; float distrecorrida; while(cin>>radio){ if(radio==0) break; if(contTest!=0) cout<>distanciaOriginal>>anguloEntrada){ if(distanciaOriginal==0&&anguloEntrada==0) break; if(anguloEntrada==90) rebotes=distanciaOriginal/(radio*2); else{ rebotes=0; distancia=0; beta=90-anguloEntrada; alfa=180-(2*beta); distrecorrida=(radio/sin(convertirarad(beta)))*sin(convertirarad(alfa)); rebotes=(int)distanciaOriginal/distrecorrida; } cout<<rebotes<<endl; } }  return 0; }
 * 1) include
 * 1) include