题面链接: http://noi.openjudge.cn/ch0113/24/
题目描述:
评析: 大模拟题,考察的是你的耐心和毅力!很不错的模拟题练习题,小白(like me)可以练一练
思路: 先一个月一个月的模拟,求出来题目问的这个一年的这一个月的第一天是星期几,然后一天一天模拟,将整个月份表打印出来. 需要注意的是闰年的二月份是有29天.
参考代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int yue[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int t_y,t_m;
int cur_y,cur_m,cur_d;
int xing;int ifrun(int x){if(x%400==0) return 1;if((x%4==0) && (x%100)) return 1;return 0;
}void cal_xing(int x){x%=7;xing+=x;xing%=7;if(xing==0) xing=7;return ;
}void cal(){cur_y=1900;cur_m=1;xing=1;while(1){if(cur_y==t_y&&cur_m==t_m) break;int tmp=yue[cur_m];if(ifrun(cur_y)&&cur_m==2) tmp++;cal_xing(tmp);cur_m++;if(cur_m==13){cur_m=1;cur_y++;}}return ;
}
void outputs(){printf("Sun Mon Tue Wed Thu Fri Sat\n");int cur_x,cur_y;xing%=7;cur_y=xing*4+1;int cur_day=1;int total_d=yue[t_m];if(ifrun(t_y)&&t_m==2) total_d++;for(int i=1;i<cur_y-1;i++) printf(" ");while(cur_day<=total_d){if(xing)printf(" ");printf("%3d",cur_day);xing++;if(xing==7){xing=0;printf("\n");}cur_day++;}return ;
}int main(void){scanf("%d%d",&t_y,&t_m);cal();//cout << xing << endl;outputs();return 0;
}