题解:UVA11715 Car

· · 题解

题目大意

已知汽车的初速度 u 、加速度 a 、时间 t 、末速度 v 、位移 s 中的部分值,要求根据输入组合计算出缺失的变量。

题目讲解

这道题就是一道朴素的语法题,主要考点是高中物理的匀变速直线运动公式。我们首先要知道:

那我们知道这些公式以后,就可以通过这些公式,计算出题目需要得出的变量。

题目中四种情况的解法

情况 1(给定 u, v, t ):

情况 2(给定 u, v, a ):

情况 3(给定 u, a, s ):

情况 4(给定 v, a, s ):

那么接下来就可以很简单地完成编码了。

参考代码

#include<bits/stdc++.h>
#define int long long
#define Rint register int
#define fast_running ios::sync_with_stdio(false),std::cin.tie(0),std::cout.tie(0)
using namespace std;

signed main() {
    fast_running;
    int op, cnt = 0;
    double t1, t2, t3;
    while (cin >> op && op != 0) {
        ++cnt;
        cout << "Case " << cnt << ": ";
        cin >> t1 >> t2 >> t3;
        if (op == 1) {
            double u = t1, v = t2, t = t3;
            cout << fixed << setprecision(3) << 1.0 * (v + u) / 2 * t << ' ';
            cout << fixed << setprecision(3) << 1.0 * (v - u) / t << '\n';
        } else if (op == 2) {
            double u = t1, v = t2, a = t3;
            cout << fixed << setprecision(3) << 1.0 * (v * v - u * u) / (2 * a) << ' ';
            cout << fixed << setprecision(3) << 1.0 * (v - u) / a << '\n';
        } else if (op == 3) {
            double u = t1, a = t2, s = t3;
            double v=1.0 * sqrt((u * u) + (2 * a * s));
            cout << fixed << setprecision(3) << v << ' ';
            cout << fixed << setprecision(3) << 1.0 * (v - u) / a << '\n';
        } else if (op == 4) {
            double v = t1, a = t2, s = t3;
            double u=1.0 * sqrt((v * v) - (2 * a * s));
            cout << fixed << setprecision(3) << u << ' ';
            cout << fixed << setprecision(3) << 1.0 * (v - u) / a << '\n';
        }
    }
    return 0;
}