📜  在C++中模拟最终课程(1)

📅  最后修改于: 2023-12-03 15:07:52.561000             🧑  作者: Mango

在C++中模拟最终课程

本文将介绍如何使用C++来模拟“最终课程”的题目,帮助程序员更好地理解该问题的解题思路并实现代码。以下是完整的代码片段和解释:

#include <iostream>
#include <string>
using namespace std;

int main() {
    int n, p, t, g;
    string s;
    cin >> n;
    while (n--) {
        cin >> p >> t >> g >> s;
        int ans = 0;
        if (s == "Y") { // 判断是否旷课
            if (p >= g) {
                ans = (p - g) * t;
            } else {
                ans = (g - p) * t + 1;
            }
        } else if (s == "N") {
            if (p >= g) {
                ans = (g + 1) * t;
            } else {
                ans = p * t;
            }
        }
        cout << ans << endl; // 输出结果
    }
    return 0;
}
解释
数据结构

题目中需要输入四个变量:

  1. p 区间起点。
  2. t 单位时间跨度。
  3. g 区间中标记的位置。
  4. s 学生是否旷课。

其中,n 表示输入的数据组数。

解题思路

首先,我们需要将输入的学生是否旷课进行判断。如果该学生没有旷课,则需要以另一种方式计算。

若学生为旷课状态,则我们需要根据该学生的区间起点、区间中标记的位置和单位时间跨度来计算总时间。具体来说,若该学生早到,则可以通过 (p - g) * t 计算直接等待的时间。反之,若该学生晚到,则可以通过 (g - p) * t + 1 计算补上等待的时间。注意到在后一种情况下,学生需要等待 g 个单位时间后才能开始上课,因此需要加上一个用户显式宣布的 “+1”。最后将这两种情况下的时间加起来即为最终的等待时间。

若学生没有旷课,则只需要根据当前所处的位置和单位时间跨度就可以计算出学生需要等待的时间。具体来说,若学生在区间起点从左往右的第 x 个位置上,则可以通过 (x + 1) * t 计算等待的时间;若学生在区间起点从右往左的第 x 个位置上,则可以通过 x * t 计算等待的时间。

最后输出所计算出的等待时间即可。

代码

以上是该问题的完整代码实现。在读者自己编写代码前,可以先使用此代码进行参考或调试。