黑色星期五~
题目大意: 从1900年1月1日开始,输入一个n,到1900+n-1年
12月31日,统计这些天中的 13 号 分别落星期几。。
解决方案:
(1)首先应该开一个长度至少为7的数组,来存放星期一到
星期天。。
(2)其次,就是有关闰年判别的算法,这个算法要当做一个模板
记住,,,用的时候要 不加思考的立马秒出来啊,,,
(3)然后,就是对于怎样累加每次所得到的天数技巧。。。判断出1900年1月13日为星期6,I = 6;
然后将每个月依次加到这个I上,在对I模7得到它是星期几,不满足1900+n-1这个条件为止
(4)核心代码就是一个时间复杂度为O(n2)的for循环,外层for用来判断是否是闰年,是的话,更新mon[1]的值为29,
题目大意: 从1900年1月1日开始,输入一个n,到1900+n-1年
12月31日,统计这些天中的 13 号 分别落星期几。。
解决方案:
(1)首先应该开一个长度至少为7的数组,来存放星期一到
星期天。。
(2)其次,就是有关闰年判别的算法,这个算法要当做一个模板
记住,,,用的时候要 不加思考的立马秒出来啊,,,
bool inline is_leap( int year )
{
if ( year%4 == 0&&year%100 != 0||year%400 == 0 )
{
return true;
}
else
{
return false;
}
}
(3)然后,就是对于怎样累加每次所得到的天数技巧。。。判断出1900年1月13日为星期6,I = 6;
然后将每个月依次加到这个I上,在对I模7得到它是星期几,不满足1900+n-1这个条件为止
(4)核心代码就是一个时间复杂度为O(n2)的for循环,外层for用来判断是否是闰年,是的话,更新mon[1]的值为29,
每进行一次内循环都要维护下mon[1] 为28。。。
代码:
# include<iostream>
# include<cstdio>
# include<cmath>
# include<cstring>
# include<cstdlib>
# include<algorithm>
using namespace std;
int day[7];
int mon[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
bool inline is_leap( int year )
{
if ( year%4 == 0&&year%100 != 0||year%400 == 0 )
{
return true;
}
else
{
return false;
}
}
int main(void)
{
memset(day,0,sizeof(day));
int n;
cin>>n;
n = n + 1900;
int I = 6;//1900年1月13日 是 星期六
for ( int i = 1900;i < n;i++ )
{
if ( is_leap( i ))
mon[1] = 29;
for ( int j = 0;j < 12;j++ )
{
day[I]++;
I = I + mon[j];
I = I % 7;
}
mon[1] = 28;
}
cout<<day[6];
for ( int i = 0;i < 6;i++ )
{
cout<<' '<<day[i];
}
return 0;
}