题面链接: 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;
}