第九届蓝桥杯省赛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星期几,那就打印到今天,再去算就行了,对吧。