挑战赛#13 T1|纪元流星雨 题解
2024-10-13 14:44:25
发布于:广东
题目链接
Macw07和AC君都点赞了,点赞!!!
题目理解
问题描述:Era 流星雨每隔 50 年发生一次。给定一个人出生在 B 年前,寿命为 L 年,下一次流星雨将在 E 年后发生,计算这个人在有生之年能够看到多少次 Era 流星雨(包括出生年和去世年)。
输入格式
- 第一行包含一个整数 T 表示测试数据组的数量。
- 对于每组测试数据,输入三条整数 B, L, E。
输出格式
- 对于每组测试数据,输出一个整数,表示这个人在有生之年能看到的 Era 流星雨次数。
逻辑步骤
- 转换年份:
- 将出生年份转换为负数,即
birth_year = -B
。 - 计算去世年份,
death_year = birth_year + L
。
- 确定流星雨的年份:
- 下次流星雨发生在
E
年后,因此我们需要计算所有的流星雨发生年份,包括过去和未来。 - 考虑到流星雨每隔
50
年发生一次,所以从E
开始回推到上一个流星雨的年份,直到这个年份小于或等于出生年份。
- 计数:
- 计算所有在
[birth_year, death_year]
范围内的流星雨年份。
- 输出结果:
- 输出每个人能看到的流星雨总次数。
C++ 代码解析
- 头文件和命名空间:
#include <bits/stdc++.h>
#define ll long long // using ll long long 也可以
using namespace std;
这里包含了一个非常通用的头文件bits/stdc++.h,它基本上包含了C++标准库的所有头文件。using namespace std;是使用标准命名空间,这样就可以直接使用如cin和cout等而不需要前缀std::。
- 主函数:
int main() {
int _; cin >> _; // _ 表示询问次数
while (_--) {
ll b, l, e;
cin >> b >> l >> e;
...
}
return 0;
}
程序首先读取测试用例的数量_,然后对每个测试用例执行循环。在循环中,读取每个测试用例的输入值b(出生年份前的年数)、l(寿命)、e(下一次流星雨距今的年数)。
- 变量转换和初始化:
b *= -1;
ll dea = b + l;
ll er = e - 50;
b *= -1;
将b转换为正数,因为b是以前的年数,我们需要将其转换为正的出生年份。
dea是人的去世年份。
er是计算上一次流星雨的年份。
4. 计算上一次流星雨的确切年份:
while (er > b)
er -= 50;
这个循环将er调整到出生年份或之前的最近的一个流星雨年份。
- 计数和输出:
int cnt = 0;
for (ll i = er; i <= dea; i += 50)
if (i >= b)
cnt++;
cout << cnt << endl;
使用一个循环从调整后的er开始,每隔50年计算一次,直到去世年份dea。
如果这个年份大于或等于出生年份b,则计数器cnt增加。
最后,输出这个计数器的值,即这个人一生中能看到的流星雨次数。
代码步骤分析(简洁版,可跳过)
- 读取输入:
- 使用
cin
读取测试用例的数量以及每个测试用例的B
,L
,E
值。
- 年限转换:
- 将
B
乘以-1
转换成实际的出生年份;计算去世年dea
。
- 流星雨年份计算:
- 先计算最近一次流星雨年份
er
,然后通过循环向前推算,直到找到小于或等于出生年份的年份。
- 计数流星雨:
- 利用循环遍历每
50
年的流星雨年份,检查其是否在个人的生命周期内,并进行计数。
- 输出:
- 将计数结果输出到标准输出。
总结
通过上述分析,我们发现这段代码有效地解决了问题,准确地计算了每个测试用例中个体在有生之年能看到的流星雨次数。这一过程综合运用了基本的数学计算、循环和条件判断,确保了结果的正确性。
我不是来要盲盒的!
全部评论 7
转人工
2024-10-12 来自 广东
1666
2024-10-13 来自 广东
0笑点解析
2024-10-13 来自 广东
1置顶没了就老实了
2024-10-13 来自 广东
1
再顶!!!
2024-10-13 来自 广东
0通过上述分析,我们发现这段代码有效地解决了问题,准确地计算了每个测试用例中个体在有生之年能看到的流星雨次数。这一过程综合运用了基本的数学计算、循环和条件判断,确保了结果的正确性。
听起来像人机
2024-10-12 来自 广东
0......
2024-10-12 来自 广东
0
这不是排位赛的题吗
2024-10-12 来自 浙江
0对呀
2024-10-12 来自 广东
0
打个广告:天之神团队,169人
2024-10-08 来自 广东
0帮定
2024-10-08 来自 广东
0顶
2024-10-08 来自 广东
0
有帮助,赞一个