下列信息是已知的,当然你也不妨自己再验证一下。 1900年1月1日是星期一。 三十天在九月中, 四六十一也相同。 剩下都是三十一, 除去二月不统一。 二十八天平常年, 多加一天在闰年。 闰年指的是能够被4整除却不能被100整除的年份,或者能够被400整除的年份。 在二十世纪(1901年1月1日到2000年12月31日)中,有多少个月的1号是星期天? 答案在评论区
from datetime import datetime, timedelta st = datetime(1901, 1, 1) ed = datetime(2000, 12, 31) delta = timedelta(1) ans = 0 while st <= ed: if st.weekday() == 6 and st.day == 1: ans += 1 st += delta print(ans)
C++:有人开外挂,我不说是谁
卧槽,6吖
答案:171
#include<iostream> using namespace std; // 初始化每月的天数 int month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 判断是否为闰年 int leap(int y) { if((y%4 == 0 && y%100 != 0) || y%400 == 0) return 1; else return 0; } int main() { // y,m,d分别为起始 年月日,Y,M,D分别为目标 年月日,w为日期,cnt记录符合要求的天数 int y = 1900,m = 1,d = 1,Y = 2000,M = 12,D = 31,w = 1,cnt = 0; while(y != Y || m != M || d != D) { // cout<<y<<" "<<m<<" "<<d<<endl; //可以输出循环中日期的变化判断代码准确性 if( w == 7 && d == 1 && y >= 1901) cnt++; //如果符合题目要求,cnt+1 month[2] += leap(y); //如果是闰年,2月变为29天 //日期模拟增加 d++,w++; if( w == 8) w = 1; if(d == month[m] + 1) { d = 1; m ++; if(m == 13) { m = 1; y++; } } month[2] = 28; //每次都将2月置为28天 } if(w == 7 && d == 1 && y >= 1901) cnt++; //判断最后一个日期是否符合要求 cout<< cnt <<endl; //输出结果 return 0; }
C++:有人开外挂,我不说是谁
卧槽,6吖
答案:171