打印月历

给你一个年份 yy 和一个月份 mm,请你按照样例的格式打印出 yy 年第 mm 月的月历。例如当 y=2015y=2015m=1m=1 时,2015 年 1 月的月历打印效果就应该如下:

  
  
1
S   M   T   W   T   F   S 
2
                1   2   3
3
4   5   6   7   8   9   10
4
11  12  13  14  15  16  17
5
18  19  20  21  22  23  24
6
25  26  27  28  29  30  31

样例的格式中,每一行为代表星期的字母,第一个字母 S 代表星期日,第二个字母 M 代表星期一,以此类推,第七个字母 S 代表星期六,第一个字母的左边没有空格,两个字母之间有三个空格分隔。接下来的几行是第 m 月的日期,每一列的数都与本列的第一个字母左对齐,同一行的两个日期之间要有若干个空格分隔。

为了简化题目的难度,输入还会给出一个正整数 nnn < 8n<8),表示第 yy 年的 1 月 1 日 是星期 nn。例如 2015 1 4 的含义是要输出 2015 年 1 月的日历,2015 年 1 月 1 日是星期四。

输入格式

输入仅有一行,包含三个正整数 yy1990< y < 21001990<y<2100),mm0< m < 130<m<13) 和 nn0 < y < 80<y<8),两数间用一个空格间隔。

输出格式

输出包含符合题目要求的若干行(请注意,每行末尾没有多余的空格)。

本题对结果的输出格式有严格要求,题目述的功能可以使用 TAB 键,在 C\C++ 中可以使用 \t 来实现。


样例输入
2015 1 4
样例输出
S   M   T   W   T   F   S
                1   2   3
4   5   6   7   8   9   10
11  12  13  14  15  16  17
18  19  20  21  22  23  24
25  26  27  28  29  30  31

#include <iostream>
#include <iomanip>
using namespace std;
int day_of_year(int year){
    if((year%4==0&&year%100!=0)||year%400==0){
        return 366;
    }else{
        return 365;
    }
}
int day_of_month(int m,int y){
    if(m==1||m==3||m==5||m==7||m==8||m==10||m==12){
        return 31;
    }else if(day_of_year(y)==365&&m==2){
        return 28;
    }else if(day_of_year(y)==366&&m==2){
        return 29;
    }else if(m==4||m==6||m==9||m==11){
        return 30;
    }
}
int day_of_year_month(int y,int m){
    int sum=0;
    for(int i=1;i<m;i++){
        sum+=day_of_month(i,y);
    }
    for(int i=1900;i<y;i++){
        sum+=day_of_year(i);
    }
    return sum;
}
int main(){
    int year;
    int month;
    int day;
    int us_l;
    cin>>year>>month>>day>>us_l;
    int sum;
    int day_c,cases=1;//声明天数,情况
    sum=day_of_year_month(year,month);
    day=sum%7+1;
    day_c=day_of_month(month,year);
    cout<<"S   M   T   W   T   F   S"<<endl;
    for(int i=0;i<day%7;i++){
        cout<<"    ";
    }
    for(int i=1,j=day+1;i<=day_c;i++,j++){
            cout<<setw(4)<<setiosflags(ios::left)<<i;
            if(j%7==0){
                cout<<endl;
            }
        }
    cout<<endl;
    return 0;
}
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值