题目:Race
来源:哈尔滨理工大学软件与微电子学院程序设计竞赛(同步赛)

解题思路

小明的跑步速度为 V1(m/s),小红的跑步速度为 V2(m/s),小明虽然跑得比较快,但是他在任一时刻领先 T 米或以上,他就会停下来休息S 秒。赛道的长度为 L(米),请预测小红和小明谁会赢。

在时间 t 时,小明和小红分别跑了 r1r2
如果 r1 - r2 > T,那么小明停 S 秒,小红继续跑;否则两人都跑。
一旦 r1r2 大于等于 L,则跳出循环判断结果。

C++代码

#include<iostream>
using namespace std;

int main(){
    int V1, V2, T, S, L;
    cin >> V1 >> V2 >> T >> S >> L;
    int r1 = 0, r2 = 0;
    int t = 0;
    while(r1 < L && r2 < L){
        while(r1 < L && r2 < L && r1 - r2 < T){
            ++t;
            r1 += V1;
            r2 += V2;
        }
        if(r1 >= L || r2 >= L)
            break;
        for(int i=1; i<=S; ++i){
            ++t;
            r2 += V2;
            if(r2 >= L)
                break;
        }
    }
    if(r1 >= L && r2 >= L)
        cout << "Tie " << t << endl;
    else if(r1 >= L)
        cout << "Ming " << t << endl;
    else
        cout << "Hong " << t << endl;
    return 0;
}