第十一届蓝桥杯 国赛B.含 2 天数
答案为:1994240
从1990年到9999年模拟每一天,数据量大概在一千万,直接暴力模拟,不讲任何技巧。
三重循环模拟年、月、日,判断年数和月数决定每月有多少天,其中要注意闰年的要求是为4的倍数且不为100的倍数或为400的倍数,和4000没有关系!!之前做过某道题说4000的倍数也是平年,是错误的!!!对于每个日期组成8位日期编号,例如20220408送到find函数判断其中是否有2。
#include <stdio.h> bool runnian(int y) { if((y%4==0&&y%100!=0)||(y%400==0))return 1; return 0; } bool find(int x) { while(x!=0) { if(x%10==2)return 1; x/=10; } return 0; } int main() { int num=0,day; for(int y=1900;y<=9999;y++) { for(int m=1;m<=12;m++) { if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)day=31; else if(m==4||m==6||m==9||m==11)day=30; else if(runnian(y))day=29; else day=28; for(int d=1;d<=day;d++) { if(find(y*10000+m*100+d))num++; } } } printf("%d",num); return 0; }