国庆星期几 (2012年蓝桥杯国赛)

题目描述:

1949年的国庆节 (10月1日) 是星期六。今年 (2012) 的国庆节是星期一。那么, 从建国到现在, 有几次国庆节正好是星期日呢?

思路解析:

1. 核心目标

        统计从1950年到2012年之间,每年10月1日是星期天的次数。 通过累计每年的总天数并取模运算,判断日期周期性规律,最终输出符合条件的年份数量。

2. 关键逻辑分解
        1). 闰年判断函数 `isleapYear`

                 规则:能被4整除且非整百年,或能被400整除的年份为闰年(如2000年是闰年,1900年不是)。

                 作用:为每年天数计算提供依据。

        2). 主函数逻辑流程

                 初始化变量 ```cpp int count = 0; // 统计符合条件的年份数 int totalDays = 0; // 从1950年开始逐年累加的天数 ```

                遍历年份范围 ```cpp for (int year = 1950; year <= 2012; year++) // 遍历63年(1950-2012) ```

                 计算每年天数并累加 ```cpp int daysInYear = isleapYear(year) ? 366 : 365; // 闰年366天,平年365天 totalDays += daysInYear; // 累计到总天数 ```

                判断条件并计数 ```cpp if (totalDays % 7 == 1) { // 总天数模7余1时,当年10月1日为星期天count++; } ```

                输出结果 ```cpp cout << count << endl; // 最终输出符合条件的年份数 ```

3. 数学原理与日期推算

         模7的意义:一周7天,总天数模7的余数对应星期数的周期性变化。

         关键推导:若累计到某年结束的总天数 `totalDays % 7 == 1`,说明当年的10月1日相对于初始参考点1949年10月1日 偏移了1天,即星期六 +1天 = 星期天。

4. 示例验证

        以 1950年 和 1951年 为例:

                1950年:平年(365天),`totalDays = 365`。- `365 % 7 = 1` → 1950年10月1日为星期日 → `count++`。

                1951年:平年(365天),`totalDays = 365 + 365 = 730`。 - `730 % 7  = 2` → 不满足条件。

代码实现:

#include<iostream>
using namespace std;

bool isleapYear(int year){
	return(year % 4 == 0 && year % 100 != 0 || year % 400 == 0);
}

int main(){
	
	int count = 0;
	int totalDays = 0;
	
	for(int year = 1950; year <= 2012; year++){
		int prevYear = year;
		int daysInYear = isleapYear(prevYear)?366:365;
		
		totalDays += daysInYear;
		if(totalDays % 7 == 1){
			count++;
		}
	}
	cout << count << endl;
	
	return 0;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值