P1424 小鱼的航程(改进版)

avatar
作者
筋斗云
阅读量: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; }

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!