这个题目是传统的打印日历的题目  不是很难 但要很细心
注意仔细观察样例的输出格式 才有可能AC
写的有点啰嗦了  如果有什么不对 欢迎大家批评指正
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
bool judge(int year)//判断是不是闰年
{
    if(year%4==0&&year%100!=0||year%400==0)
    return true;
    else
    return false;
}
int DaysReturn(int year,int month)//找出输入的日期的月份的一号距离2007年1月1日有多少天
{
    int sum=0;//统计一年内的天数
    int sum1=0;//统计间隔了多少年的天数
    if(judge(year))
    {
        switch(month)
        {
            case 1: sum=0;break;
            case 2: sum=31;break;
            case 3: sum=31+29;break;
            case 4: sum=31+29+31;break;
            case 5: sum=31+29+31+30;break;
            case 6: sum=31+29+31+30+31;break;
            case 7: sum=31+29+31+30+31+30;break;
            case 8: sum=31+29+31+30+31+30+31;break;
            case 9: sum=31+29+31+30+31+30+31+31;break;
            case 10: sum=31+29+31+30+31+30+31+31+30;break;
            case 11: sum=31+29+31+30+31+30+31+31+30+31;break;
            case 12: sum=31+29+31+30+31+30+31+31+30+31+30;break;
                 
        }
    }
    else
    {
        switch(month)
        {
            case 1: sum=0;break;
            case 2: sum=31;break;
            case 3: sum=31+28;break;
            case 4: sum=31+28+31;break;
            case 5: sum=31+28+31+30;break;
            case 6: sum=31+28+31+30+31;break;
            case 7: sum=31+28+31+30+31+30;break;
            case 8: sum=31+28+31+30+31+30+31;break;
            case 9: sum=31+28+31+30+31+30+31+31;break;
            case 10: sum=31+28+31+30+31+30+31+31+30;break;
            case 11: sum=31+28+31+30+31+30+31+31+30+31;break;
            case 12: sum=31+28+31+30+31+30+31+31+30+31+30;break;
                 
        }
    }
    for(int i=2007;i<year;i++)
    {
        if(judge(i))
        {
            sum1+=366;
        }
        else
        sum1+=365;
    }
    sum1+=sum;//总天数
    return sum1; 
}
void Print(int year,int days,int month)
{
     
    int x=days%7+1;//找出这个月的1号是星期几
    int monthdays;//这个月有多少天
    cout<<"---------------------"<<endl;
    cout<<" Su Mo Tu We Th Fr Sa"<<endl;
    cout<<"---------------------"<<endl;
        if(month==2)
        {
            if(judge(year))
                monthdays=29;
                else
                monthdays=28;
        }
        else if(month==4||month==9||month==6||month==11)
        {
            monthdays=30;
        }
        else monthdays=31;
    if(x==7)
    printf("%3d",1);//针对每个月一号不同的星期制定不同的输出格式
    if(x==1)
    printf("%6d",1);
    if(x==2)
    printf("%9d",1);
    if(x==3)
    printf("%12d",1);
    if(x==4)
    printf("%15d",1);
    if(x==5)
    printf("%18d",1);
    if(x==6)
    printf("%21d",1);
    for(int i=2;i<=monthdays;i++)
    {
        printf("%3d",i);
        if((i+(x%7))%7==0&&i<monthdays) printf("\n");//注意如果一个月的最后一号是星期6则无需空行   
    }
    cout<<endl;
    cout<<"---------------------"<<endl;
}
int main()
{
    int year,month;
    while(cin>>year>>month)
    {
    int days=DaysReturn(year,month);
    Print(year,days,month);
    }
    return 0;      
}


点赞(5)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论