题目描述
有一只小鱼,它上午游泳150公里,下午游泳100公里,晚上和周末都休息(实行双休日),假设从周x(1<=x<=7)开始算起,请问这样过了n天以后,小鱼一共累计游泳了多少公里呢?
输入输出格式
输入格式:
输入两个整数x,n(表示从周x算起,经过n天,n在long int范围内)。
输出格式:
输出一个整数,表示小鱼累计游泳了多少公里。
最开始时候的做法,
方法很简单,算出有多少周(n/7),然后判断剩下的日子工作了多少天。
#include <iostream> int main() { int x, n; std::cin >> x >> n; int d = n / 7 * 5; int r = n % 7; if (r > 0) { if (r + x == 7) r -= 1; else if (r + x >= 8) r -= 2; } std::cout << (d + r) * 250 ; return 0; }
结果提交测试时候出现了一个错误,
在看了别人的答案后发现了问题---计算剩下的日子中工作日子出现了问题。
对于周1~周6,原来的方法是没有问题的,
但是周7时,就会出错。原因是周7的时候r不能-2,因为此时周6已经过去了,不能再向前面一样减去周6.
将周7作为特例考虑,周7时,r-=1,(减去周日即可)。
if (r > 0) { if (r + x == 7 || x == 7) r -= 1; else if (r + x >= 8) r -= 2; }
从这个题目中可以学到,使用条件判断(if)时候,要考虑周全,最好多考虑几个特例,比如边界,中间等等。