ZOJ 3939The Lucky Week<模拟/暴力>
题意:我们认为日期的天数为1,11,21,并且是周一的为Lucky Week;现在给出第一个lucky week的日期,求第N个的lucky week;
//1:四百年一轮回,从闰年和平年的判定可以推出。 //2:由上一条可以用程序判断出每四百年有2058个天为1,11,21的星期一,直接用。 #include<cstdio> #include<iostream> #include<algorithm> using namespace std; int m1[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int m2[13]={0,31,29,31,30,31,30,31,31,30,31,30,31}; bool run(int year) { if(year%400==0||(year%4==0&&year%100!=0)) return true; else return false; } int main () { int y,m,d,n; int T;scanf("%d",&T); while(T--) { scanf("%d%d%d%d",&y,&m,&d,&n); y+=(n/2058)*400; n%=2058; while(n){ if(d==11||d==21||d==1) n--; if(n==0) break; if(run(y)) { d+=7; if(d>m2[m]) { d-=m2[m]; m++; } if(m>12){ y++; m=1; } } else { d+=7; if(d>m1[m]) { d-=m1[m]; m++; } if(m>12){ y++; m=1; } } } printf("%d %d %d\n",y,m,d); } return 0; }
想的太多,做的太少。