洛谷B3846[GESP样题 一级] 闰年求和

一、原理

 

本题要求计算给定两个年份 a 和 b 之间(不包含 a 和 b 本身)所有闰年的年份之和。闰年的判断规则是:能被 400 整除的年份是闰年,或者能被 4 整除但不能被 100 整除的年份也是闰年。代码通过遍历 a + 1 到 b - 1之间的所有年份,根据闰年判断规则筛选出闰年,并将这些闰年的年份值累加起来,最终输出累加和。

二、步骤

  1. 输入处理
    • 从标准输入读取两个整数 a 和 b,代表两个年份。
    • 为了确保后续遍历范围的正确性,如果 a 大于 b,则交换 a 和 b 的值,保证 a 小于等于 b
  2. 初始化累加和
    • 定义一个整数变量 sum,并初始化为 0,用于存储所有闰年年份的累加和。
  3. 遍历年份范围并判断闰年
    • 使用 for 循环遍历从 a + 1 到 b - 1 的所有年份,循环变量为 i
    • 对于每个年份 i,使用闰年判断条件 i % 400 == 0 || (i % 4 == 0 && i % 100 != 0) 进行判断:
      • 如果满足该条件,说明 i 是闰年,将 i 的值累加到 sum 中,即 sum = sum + i
  4. 输出结果
    • 循环结束后,使用 cout 输出 sum 的值,即 a 和 b 之间所有闰年年份的累加和。

三、图示法表示步骤(以 a = 2000b = 2005 为例)

步骤操作详细说明  
1输入处理读取 a = 2000b = 2005,由于 a < b,不需要交换。  
2初始化累加和sum = 0  
3遍历年份范围并判断闰年   
 i = 2001判断 `2001 % 400 == 0 (2001 % 4 == 0 && 2001 % 100 != 0),结果为 false`,不进行累加。
 i = 2002判断 `2002 % 400 == 0 (2002 % 4 == 0 && 2002 % 100 != 0),结果为 false`,不进行累加。
 i = 2003判断 `2003 % 400 == 0 (2003 % 4 == 0 && 2003 % 100 != 0),结果为 false`,不进行累加。
 i = 2004判断 `2004 % 400 == 0 (2004 % 4 == 0 && 2004 % 100 != 0),结果为 truesum = sum + 2004 = 2004`。
4输出结果输出 sum 的值,即 2004。  

四、代码关键行注释

 

#include<iostream>

using namespace std;

int main() {
    int a, b;
    cin >> a >> b;  // 从标准输入读取两个年份 a 和 b
    if(a > b){  // 如果 a 大于 b,交换 a 和 b 的值
        int temp = a;
        a = b;
        b = temp;
    }

    int sum = 0;  // 初始化累加和为 0
    for (int i = a + 1; i <= b - 1; i++) {  // 遍历 a + 1 到 b - 1 之间的所有年份
        if (i % 400 == 0 || (i % 4 == 0 && i % 100 != 0)) {  // 判断 i 是否为闰年
            sum = sum + i;  // 如果是闰年,将 i 累加到 sum 中
        }
    }
    cout << sum << endl;  // 输出累加和
    return 0;
}

五、完整代码程序

 

完整代码就是上述代码:

 

#include<iostream>

using namespace std;

int main() {
    int a, b;
    cin >> a >> b;
    if(a > b){
        int temp = a;
        a = b;
        b = temp;
    }

    int sum = 0;
    for (int i = a + 1; i <= b - 1; i++) {
        if (i % 400 == 0 || (i % 4 == 0 && i % 100 != 0)) {
            sum = sum + i;
        }
    }
    cout << sum << endl;
    return 0;
}

六、时间复杂度

代码中主要的操作是遍历 a + 1 到 b - 1 之间的所有年份,循环执行的次数为 b - a - 1,因此时间复杂度为 ,即与两个年份之间的差值成正比。

七、总结

这段代码通过简单的循环和条件判断,实现了计算两个年份之间所有闰年年份之和的功能。代码逻辑清晰,易于理解,使用了正确的闰年判断规则。不过,代码没有对输入的年份进行有效性检查,例如输入的年份可能为负数或者不符合实际年份范围等情况。在实际应用中,可以添加输入验证逻辑,提高代码的健壮性。此外,对于较大的年份差值,该算法的效率可能会受到一定影响,但对于本题的数据规模通常是足够的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值