洛谷 P1424 小鱼的航程

题目链接:点击跳转题目
题目背景
原来的题目太简单,现改进让小鱼周末也休息,请已经做过重做该题。

题目描述
有一只小鱼,它平日每天游泳 250 公里,周末休息(实行双休日),假设从周 x (1 ≤ x ≤ 7) 开始算起,过了 n ( n ≤ 106 ) 天以后,小鱼一共累计游泳了多少公里呢?

输入格式
输入两个整数x,n(表示从周x算起,经过n天)。

输出格式
输出一个整数,表示小鱼累计游泳了多少公里。

数组代码如下:

#include<cstdio>
#include<cstring>
#define LL long long

LL solution(int x, int n);

int main(void) {
	int x, n;

	scanf("%d %d", &x, &n);
	printf("%lld\n", solution(x, n));
				
	return 0;
}

LL solution(int x, int n) {
	int kilometer[8] = { 0, 250, 250, 250, 250, 250, 0};
	LL sum = kilometer[x];

	for (int i = 1; i < n; i++) {
		sum += kilometer[(x + i) % 7];
	}

	return sum;
}

数学方法:这是真的不好想啊,看了别人题解上正好有这种。

#include<cstdio>
#include<cstring>
#define LL long long

LL solution(int x, int n);

int main(void) {
	int x, n;

	scanf("%d %d", &x, &n);
	printf("%lld\n", solution(x, n));
				
	return 0;
}

LL solution(int x, int n) {
	LL kilometer = 0;

	if (n == 0)
		return 0;

	int weekDay = n / 7 * 5;//整周的工作日
	int modDay = n % 7;//剩余的天

	if (modDay > 0) {
		if (x == 7 || modDay + x == 7)//开始的时候是周末,那么周末不游。 而且假如x+modDay = 7,那么最后一天是周六
			modDay--;//比如周一开始游三天,那么到1+3=4,但是只在周一周二周三游,即周三是最后一天
		else if (x + modDay >= 8)//那么周六周日都没有游
			modDay -= 2;
	}
		
	kilometer = (weekDay + modDay) * 250;
	return kilometer;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值