学校设立了N个值日大队长和M个值日小队长,大队长一周一换,小队长每天一换。甲是第P个大队长,乙是第Q个小队长。学期的第一天是周一,学期一共有1000天。每周六周日不上学。请问本学期的第几天甲和乙第一次同一天值日。 输入 一共,四个正整数 N、M、P、Q,意义如题所示。 输出 一个整数,意义如题所述,如果没有这种情况,输出Impossible。 样例输入 Copy 5 10 2 8 样例输出 Copy 10 用c++语言
时间: 2024-04-08 12:34:26 浏览: 13
首先,我们需要确定甲和乙分别在第几天开始担任值日大队长和值日小队长。
甲是第P个大队长,所以他的值日周期为N,即每隔N天担任一次大队长。学期第一天是周一,因此甲的第一次担任大队长是在第P天。
乙是第Q个小队长,所以他的值日周期为M,即每隔M天担任一次小队长。学期第一天是周一,因此乙的第一次担任小队长是在第Q天。
接下来,我们需要找到甲和乙第一次同一天值日的情况。
我们可以从甲和乙的第一次值日开始,逐天判断两者是否在同一天值日。如果是,则输出当前的天数;如果不是,则继续判断下一天。
需要注意的是,学期一共有1000天,且每周六周日不上学。所以我们需要在循环中判断当前天数是否为周末,并跳过周末。
以下是用C++语言实现的代码:
```cpp
#include <iostream>
int main() {
int N, M, P, Q;
std::cin >> N >> M >> P >> Q;
int day = 1;
int captainP = P;
int captainQ = Q;
while (day <= 1000) {
// 判断甲和乙是否在同一天值日
if (captainP == captainQ) {
std::cout << day << std::endl;
return 0;
}
// 判断当前天数是否为周末
if (day % 7 == 6 || day % 7 == 0) {
day++;
continue;
}
// 更新甲和乙的值日情况
captainP = (captainP + N) % (N * 7);
captainQ = (captainQ + M) % (M * 7);
day++;
}
std::cout << "Impossible" << std::endl;
return 0;
}
```
希望对你有帮助!如有疑问,请继续提问。