阅读量:3
题目背景
题目描述
有一只小鱼,它平日每天游泳 250250 公里,周末休息(实行双休日),假设从周 x 开始算起,过了 n 天以后,小鱼一共累计游泳了多少公里呢?
输入格式
输入两个正整数 x,n,表示从周 x 算起,经过 n 天。
输出格式
输出一个整数,表示小鱼累计游泳了多少公里。
输入输出样例
输入 #1
3 10
输出 #1
2000
说明/提示
数据保证,1≤x≤7,1≤n≤106。
我记得这个问题我第一次做的时候就写了好久……
今天是第二次做,一开始我的思路是,不管我是周几开始数的,最后过得x天中,必有x/7*5个工作日,所以直接拿这个数字×250,再加上余数×250即可。这样的结果是只有80分,遗漏了几种情况:比如周六开始计算,当x<=2时,里程数为0;或周日开始计算,当x<=1时,里程数为1;或最后结束的那天是周六或周日,余数需要- 1才能再×250……
所以最后用分支结构的代码如下:
#include <bits/stdc++.h> using namespace std; int main(){ int x,n; cin>>x>>n; int d=n/7*5; int r=n%7; if(r!=0){ if(r+x==7||x==7) r-=1; else if(r+x>7) r-=2; } cout<<(d+r)*250<<endl; return 0; }
还有一个思路是用循环结构,在经过的天数x中使用循环结构。比较好理解,i从1开始,表示是数数的第一天。如果这天不是周末,里程数+250,并且i增1,n增1,到下一天,继续判断第二天是否为周末,如果不是,里程数+250,i++,n++。如果是周日的话,从周一开始数,即n=1。(i表示数数的天数,n指星期几)。代码如下。
#include <bits/stdc++.h> #include <cstring> using namespace std; int main(){ int x,n,s=0; cin>>x>>n; for(int i=1;i<=n;i++){ if(x!=6&&x!=7) s+=250; if(x==7) x=1; else x++; } cout<<s<<endl; return 0; }