这个题范围是1e6,比赛中一定用循环做的,不用循环做法的话,必须考虑到所有情况。
解法:先计算完整的周的工作日数 n / 7 * 5
,然后计算凑不够7天的天数 r
里边有多少个有效工作日。
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
int x, n; cin >> x >> n;
int d = n / 7 * 5; // 完整周的工作时间
int r = n % 7; // 余下的天数,不满7
if (r > 0) { // 算剩余天数里的工作日
if (x == 7 || x + r == 7) { // 只休息一天的情况
r--;
} else if (x + r > 7) {
r-=2;
}
}
cout << (d+r) * 250;
return 0;
}
只休息一天的有两种情况,分别是周六和周天休息。只有周天休息的情况一定是第一天就是周天,即 x == 7
;只有周六休息的情况是第一天是周x,最后一天是周六,一定有 6 - x + 1 == r
,即 x + r == 7
,也可以容易推出休息两天的情况满足等式 x + r > 7
。