Ural 1201 Which Day Is It? 题解
题意
打印一个月历。
输入
输入日\((1\sim31)\)、月\((1\sim12)\)、年\((1600\sim2400)\)。
输出
输入: 16 3 2002输出:mon........4...11...18...25tue........5...12...19...26wed........6...13...20...27thu........7...14...21...28fri...1....8...15...22...29sat...2....9..[16]..23...30sun...3...10...17...24...31
输入: 1 3 2002输出:mon........4...11...18...25tue........5...12...19...26wed........6...13...20...27thu........7...14...21...28fri.[.1]...8...15...22...29sat...2....9...16...23...30sun...3...10...17...24...31
打印\(7\)行,"mon""tue"...这些都懂吧。在输入的那天打上[]。
Tips:
样例输出中的'\(.\)'其实是' '(空格)。
输出的第一列日期前有三个'\(.\)',第二列即以后一位数前有\(4\)个,两位数前有\(3\)个。
例: 输入: 30 1 2012输出:mon........2....9...16...23..[30]tue........3...10...17...24...31wed........4...11...18...25.....thu........5...12...19...26.....fri........6...13...20...27.....sat........7...14...21...28.....sun...1....8...15...22...29.....
如果输入的那一天是个一位数,则打印\([.x]\)。
题解
- 找出这一个月的第一天是星期几。
- 知道1.1.1(公元元年1月1日)是星期一。
- 暴力推一下就可以了。
- 打印月历。
Tip: 口胡得很简单,写起来可能有点麻烦,要仔细。
程序
// #pragma GCC optimize(2)// #pragma G++ optimize(2)// #pragma comment(linker,"/STACK:102400000,102400000")// #include #include
w[8]; int lst=getweek(year,month); w[lst].push_back(1); rep1(i,lst-1) w[i].push_back(0); int pos[15]; pos[0]=6; rep1(i,5) pos[i]=pos[i-1]+5; repa1(i,2,getday(year,month)) { lst++; if(lst==8) lst=1; w[lst].push_back(i); } string str[8]; rep1(i,7) { str[i]=weeks[i]; rep(j,100) str[i]+=" "; rep(j,w[i].size()) { int x=w[i][j]; if(x) str[i][pos[j]]=(x%10+'0'); if(x/10) str[i][pos[j]-1]=(x/10+'0'); if(x==day) { str[i][pos[j]-2]='['; str[i][pos[j]+1]=']'; } } } rep1(i,7) cout<