第九届蓝桥杯省赛C++A组第二题 ---星期一

题目
第二题 星期一 整个20世纪(1901年1月1日至2000年12月31日之间),一共有多少个星期一? (不要告诉我你不知道今天是星期几) 注意:需要提交的只是一个整数,不要填写任何多余的内容或说明文字。

解:
我的方法是直接把日历打印出来,每七天一行,然后有多少行就有多少个星期,当然这里先按1901/1/1是星期一打印(我的电脑查不到1900/1/1 星期几),然后看下日历2000/12/31是星期几,整体移动一下就行了。

代码:

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

int a[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
int b[12] = {31,29,31,30,31,30,31,31,30,31,30,31}; // 闰年
int days = 0;			//共多少天 
int rows = 0; 			//共多少行 
bool f(int n)			// n是不是闰年 
{
	if((n%4 == 0 && n % 100 !=0)|| n % 100 ==0)
		return true;
	else
		return false; 
}

void print(int t[])				//打印那一年 
{
	for(int i = 0; i < 12; i++)
		{
			for(int j = 1; j <= t[i];j++)
			{
				cout<<j<<"  ";
				days++;
				if(days % 7 == 0)		//  7天一礼拜 
				{
					cout<<endl;
					rows++;
				}
			} 
		}
} 
int main()
{
	int start = 1901;
	int end = 2000;
	for(int i = start; i <= end; i++)
	{
		if(f(i) == true)		//是闰年,按b数组打印 
			print(b); 
		else					//不是,按a数组打印 
			print(a); 
	}
	cout<<"rows is "<<endl;
	cout<<rows<<endl;
	return 0;
}

答案:5217

1900年的开头
在这里插入图片描述
最后:
在这里插入图片描述
查日历可以发现2000/12/31是星期日,所以我们打印的日历要往后对齐,就是说2000/12/31/是星期日(我们把它打印成星期六了),整体往后推移一天,1900/1/1 对齐星期二。
注:因为最后一行没有满7天(它本应该满的,因为2000/12/31/是星期日啊),所以rows没有++

另外如果查不到2000/12/31星期几,那就打印到今天,再去算就行了,对吧。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值