僵尸大战爆发了。你每天观察僵尸,发现如下规律: 在每个星期一会有1头僵尸来袭; 在每个星期二会有2头僵尸来袭; 在每个星期三会有3头僵尸来袭; 在每个星期四会有4头僵尸来袭; 在每个星期五会有5头僵尸来袭; 在每个星期六会有6头僵尸来袭; 在每个星期天会有10头僵尸来袭。 输入一个正整数n(1<=n<=10^15),输出你经过连续n天的观察,最多可以看到几头僵尸。 输入输出格式 输入格式 如题 输出格式 如题 输入输出样例 输入样例#1: 8 输出样例#1: 41 输入样例#2: 无 输出样例#2: 无 输入样例#3: 无 输出样例#3: 无
时间: 2024-04-19 09:30:18 浏览: 47
根据题目描述,我们可以观察到一个周期为7天的规律,即星期一到星期天每天的僵尸数量逐渐增加。在一个周期内,星期一到星期六的僵尸数量是固定的,只有星期天的僵尸数量是10头。
根据这个规律,我们可以计算出连续n天的观察中最多可以看到几头僵尸。首先,我们可以计算出完整周期的观察次数k = n / 7(向下取整),然后再计算剩余不完整周期的观察天数r = n % 7。
对于完整周期的观察,每个周期内的僵尸数量之和为1 + 2 + 3 + 4 + 5 + 6 + 10 = 31。因此,完整周期的观察中最多可以看到 k * 31 头僵尸。
对于剩余不完整周期的观察,我们需要单独计算。根据题目描述,星期一到星期r的僵尸数量依次增加,因此剩余不完整周期的观察中最多可以看到 r * (r + 1) / 2 头僵尸。
最后,将完整周期观察中看到的僵尸数量和剩余不完整周期观察中看到的僵尸数量相加,即可得到最终结果。
以下是一个使用C++解决该问题的示例代码:
```cpp
#include <iostream>
using namespace std;
long long maxZombies(long long n) {
long long k = n / 7; // 完整周期的观察次数
long long r = n % 7; // 剩余不完整周期的观察天数
long long totalZombies = k * 31; // 完整周期中看到的僵尸数量
// 剩余不完整周期中看到的僵尸数量
if (r > 0) {
totalZombies += r * (r + 1) / 2;
}
return totalZombies;
}
int main() {
long long n;
cin >> n;
long long result = maxZombies(n);
cout << result << endl;
return 0;
}
```
你可以将输入的n传递给`maxZombies`函数,然后打印结果。注意,这里使用了`long long`类型来处理大整数。
希望对你有帮助!如果你有任何其他问题,请随时提问。
阅读全文