题目描述
有一只小鱼,它平日每天游泳 250 250 250 公里,周末休息(实行双休日),假设从周 x x x 开始算起,过了 n n n 天以后,小鱼一共累计游泳了多少公里呢?
输入格式
输入两个正整数 x , n x,n x,n,表示从周 x x x 算起,经过 n n n 天。
输出格式
输出一个整数,表示小鱼累计游泳了多少公里。
样例输入
3 10
样例输出
2000
提示
数据保证, 1 ≤ x ≤ 7 1\le x \le 7 1≤x≤7, 1 ≤ n ≤ 1 0 6 1 \le n\le 10^6 1≤n≤106。
参考代码1
#include<iostream>
using namespace std;
int main() {
int x, n, v = 250, tot = 0;
cin >> x >> n;
//将周2~周日开始的情况,先计算出第1周的游泳距离,把所有问题都转化成从周一开始的情况
switch (x) {
case 2: //如果从星期2开始
tot = 4 * v; //第1周游4天
n = n - 6; //去掉第1周的6天
break;
case 3: //如果从星期3开始
tot = 3 * v; //第1周游3天
n = n - 5; //去掉第1周的5天
break;
case 4: //如果从星期4开始
tot = 2 * v; //第1周游2天
n = n - 4; //去掉第1周的4天
break;
case 5: //如果从星期5开始
tot = v; //第1周游1天
n = n - 3; //去掉第1周的3天
break;
case 6: //如果从星期6开始
n = n - 2; //去掉第1周的2天
break;
case 7: //如果从星期7开始
n = n - 1; //去掉第1周的1天
}
tot += 5 * v * (n / 7); //完整周
//最后一周的游泳天数
int t = 0;
if (n % 7 <= 5) t = n % 7;
else t = 5;
//最后一周的游泳距离
tot += v * t;
//输出结果
cout << tot;
return 0;
}
参考代码2
#include<iostream>
using namespace std;
int main() {
int x, n;
cin >> x >> n;
//当x是周六、周日时,相当于从下周一开始
if (x == 6) {
x = 1;
n = n - 2;
}
if (x == 7) {
x = 1;
n = n - 1;
}
//当x是1~5时
int tot = n / 7 * 5; //完整的星期数
if ((n % 7 + x - 1) > 5) //最后1天超过星期5
tot += 5 - x + 1;
else tot += n % 7; //最后1天有超过星期5
cout << tot * 250; //输出总长度
return 0;
}