蓝桥杯VIP——黑色星期五

48 篇文章 2 订阅
11 篇文章 5 订阅

1.问题描述


2.算法分析

典型的日期计算,其实就是枚举思想,首先我们确定从1998.1.1日周四开始枚举,然后判断该年是否为闰年,再去判断当星期数为8时我们需要将星期数重置为星期1开始,当每天的天数等于月末+1天时重置天数为下个月1号,当月份为13时跳出循环,年份+1,再依次循环。最后输出即可。

提示:
这里有几个坑:首先你判断月末和星期数都要+1而不是星期7就变为1,而且月末+1天也是个坑
然后需要注意的是,一开始循环我们不应该先将天数和星期数++,而是在后面进行++
应该先判断是否是黑色星期五在判断星期数,在判断月份是否到年末了。


3.源代码:

#include <iostream>
#include <cstdio>
using namespace std;

int m[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};//存储每一个月的天数

int main(){
	int year;
	scanf("%d", &year);
	int y = 1998;
	int d = 1;	//1998.1.1
	int month = 1; //1月份 
	int w = 4;	//周四
	int cnt = 0;  //记录每一年的既是13号又是周五的天数 
	while(y <= year){
//		cnt = 0;  //记录每一年的既是13号又是周五的天数 
		if (y % 400 == 0 || (y % 100 != 0 && y % 4 == 0)){
			m[2] = 29;
		} else{
			m[2] = 28;
		}
		while(1){
			if (d == 13 && w == 5 && y == year){
				cnt++;
			}
			if (w == 8){
				w = 1;
			}
			if (d == m[month] + 1){
				month++;
				d = 1;
			}
			if (month == 13){
				d = 1;
				month = 1;
				break;
			}
			d++;
			w++;
		}
		y++;
	}
	printf("%d\n", cnt); 
	return 0;
} 

可以关注一下Blog:http://47.107.118.184

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值