原题
解析:

其实。样例的部分是从周六~周五输出的,习惯不同吧。。这里考虑到从这个月的13号到下一个月的13号所花天数为这个月的天数,然后愉快的判断一下闰年即可。这里的周一~周日编号为0~6,一月到十二月的编号为0~11(方便计算)。。而且1900/1/13是周六
代码:

#include<cstdio>
struct date {int yy,mm,ww;};
bool operator<(const date &a,const date &b) {
    if(a.yy!=b.yy) return a.yy<b.yy;//日期比较
    if(a.mm!=b.mm) return a.mm<b.mm;
    return 0;
}
int d[2][13]= {31,28,31,30,31,30,31,31,30,31,30,31,0,31,29,31,30,31,30,31,31,30,31,30,31,0};
void operator++(date &a) {
    bool spl=0;//是否闰年
    if(!(a.yy%400)) spl=1;
    if((a.yy%100)&&!(a.yy%4)) spl=1;
    a.ww+=d[spl][a.mm++],a.ww%=7;
    if(a.mm==12) a.yy++,a.mm=0;
}
int main() {
    int n,t[7]={0};
    scanf("%d",&n);
    date a=(date) {1900,0,5};//起始时间
    date b=(date) {1900+n-1,11,-1};//终止时间
    while(!(b<a)) t[a.ww]++,++a;//过程
    for(int i=5; i<12; i++) printf("%d ",t[i%7]);//输出
    return 0;
}
04-24 14:01
查看更多