解题思路:
欢迎加我QQ啊:1551755561(路小鹿)
假设画一张无限大的网格,球在上面走简单的直线(不拐弯)。
最后按网格上的线折叠,直到终点落回到原始小矩形内,求这时的坐标即可。
注意事项:
算法没错,但总有小误差,修修改改后才通过。注意两点即可:
1,用double,别用float;
2,需要圆周率时(角度转换为弧度),之直接写“3.1415926”的精确度还是不够!上网搜一个更精确的果然通过了。
又看到这里第一个答案,学到了计算圆周率的好方法
参考代码:
#include<iostream> #include<cmath> #include<iomanip> using namespace std; double DuiZhe(double num, double Zhou)//对折函数,num关于Zhou(轴)对称值 { return 2.0 * Zhou - num*1.0; } double L, W, X, Y, R, a, v, s; int main() { double a2, x_big, y_big;//a2是a角度转换为的弧度角 while (cin >> L >> W >> X >> Y >> R >> a >> v >> s) { if (L == 0 && W == 0 && X == 0 && Y == 0 && R == 0 && a == 0 && v == 0 && s == 0) return 0; //a2 = a*0.0174532925199389;//可以 //a2 = a*3.1415926/180;//不可以 a2 = a*asin(1)*2/180;//可以 //如果不拐弯,小球最远到达的坐标 x_big = X + v*s*cos(a2); y_big = Y + v* s*sin(a2); //将小球走过的直线对折,直到终点落到题中所给的小矩形 while (1) { if (x_big > L - R) x_big = DuiZhe(x_big, L - R); else if (x_big < R) x_big = DuiZhe(x_big, R); else break; } while (1) { if (y_big > W - R) y_big = DuiZhe(y_big, W - R); else if (y_big < R) y_big = DuiZhe(y_big, R); else break; } //格式化输出 cout << setiosflags(ios::fixed) << setprecision(2); cout <<x_big << " " << y_big << endl; } }
0.0分
1 人评分
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:949 |
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:636 |
IP判断 (C语言代码)浏览:819 |
A+B for Input-Output Practice (III) (C语言代码)浏览:594 |
【亲和数】 (C语言代码)浏览:628 |
C语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:1495 |
C二级辅导-温度转换 (C语言代码)浏览:802 |
大神老白 (C语言代码)浏览:637 |
多输入输出练习2 (C语言代码)浏览:1709 |
C语言程序设计教程(第三版)课后习题6.5 (C语言代码)浏览:548 |