题解分享
题解分享简介
小球反弹(结果填空) - 题解
设矩形长为x,高为y小球最终横向路程为2X的整数倍(小球无论走多少次最后都要回到横向起点),最终纵向路程为2y的整数倍(同理),可得1.Sx=k12x,Sy=k22y。由于速度之比是dx:dy=15:17,可认为是15m/s与17m/s。注意到时间t与S的关系为:Sx与Sy用了同样的时间t,可知2.dx t=Sx,dyt=Sy( 无论走了多少次,反弹多少,速度不变都是匀速,公式成立),由式1.2.可推出k1与k2之比。又dx=15,可算出时间t,Sx,Sy,总路程由勾股定理可得S=sqrt(Sx方+Sy方)。 源代码如下:
```
#include
using namespace std;
int main()
{
int fenzi=15*233333;
int fenmu=17*343720;
int g=__gcd(fenzi,fenmu);
fenzi/=g;
fenmu/=g;
cout<<fenzi<<"/"<<fenmu<<"\n";
double t=2*1059*343720/15;
cout<<t<<"\n";
double s=sqrt((15*t)*(15*t)+(17*t)*(17*t));
printf("%.2lf",s);
}
```
查看全文
1
0
1
10
小球反弹(结果填空) - 题解
C语言版
```
#include
int main()
{
int sx=15*233333,sy=17*343720,t,i;
double s,k1,k2;
if(sx<sy) t=sx;
for(i=sx;i>0;i--)
{
if(sx%i==0&&sy%i==0)
break;
}
k1=sx/i,k2=sy/i;
s=sqrt((k1*2*343720)*(k1*2*343720)+(k2*2*233333)*(k2*2*233333));
printf("%.2lf",s);
}
```
查看全文
0
0
1
5
小球反弹(结果填空) - 题解
```cpp
// https://dashoj.com/d/lqbproblem/p/196
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll dx = 15, dy = 17;
ll width = 343720 * 2, height = 233333 * 2;
ll gcd(ll a, ll b) { // 最大公因数
if (b == 0) return a;
return gcd(b, a % b);
}
ll lcm(ll a, ll b) { // 最小公倍数
return a / gcd(a, b) * b;
}
int main() {
cout.precision(2);
cout << fixed;
ll dt = lcm(dx, width) / dx;
for (int t = dt;; t += dt)
if (t * dy % height == 0) {
cout << hypot(t * dx, t * dy);
break;
}
return 0;
}
```
查看全文
0
0
0
4



