咱们常常须要应用日历,所以须要一个能生成日历的程序。
先要求你写一个程序,只须要输出年份,就能生成正确的日历。
输出
输出蕴含多组测试数据。每组输出一个整数Y(1800<=Y<=2100),示意公元年份。
输入
对于每组输出,输入对应的日立本。选中上面的输入样例查看具体的输入格局,留神空格的输入。
样例输出 Copy
2010
样例输入 Copy
整年的日历格局
https://blog.csdn.net/mustuo/...

代码示例(我没彻底搞懂,这是大佬的代码)

////详见:https://blog.csdn.net/mustuo/article/details/103981084 //#include<stdio.h> // //int days[13]={-1,31,-1,31,30,31,30,31,31,30,31,30,31};//每月的天数 // //void print_block_title(int i){//    switch(i){//        case 1:printf("      January               February               March        \n");break;//        case 2:printf("       April                  May                   June        \n");break;//        case 3:printf("        July                 August              September      \n");break;//        case 4:printf("      October               November              December      \n");break;        //    }//}//void print_week_name(){//    printf("Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa\n");//}//void print_title(int y){//    printf("                              %d                              \n\n",y);//}///**//判断是否平年 //**/ //int is_leap_year(int y){//    if(y%4==0 && y%100!=0 || y%400==0){//        return 1;//    }else{//        return 0;//    }//}// //int max_r(int a, int b,int c){//    if(a>=b && a>=c){//        return a;//    }//    if(b>=a && b>=c){//        return b;//    }//    if(c>=a && c>=b){//        return a;//    }//}// ///**//计算某个月的第一天是星期几//return:星期(0:星期一,以此类推) //note:应用蔡勒公式。1,2月要当成上一年的13,14月计算。 //**///int day_of_first(int y,int m){//    if(m==1 || m==2){//        y--;//        m += 12;//    }//    int c = y/100;//    y %=100;//    int w = y+y/4+c/4-2*c+(26*(m+1)/10);//    if(w<0){//        w = (w%7+7)%7;//    }else{//        w %= 7;//    }//    return w;//}//int main(){//    int Y;//    while(scanf("%d",&Y)!=EOF){        //        //        //title//        print_title(Y);//        //        //block//        int line_i,j;//        int w[3];    //每个月的第一天是星期几(0:星期日)//        int d[3];    //累计日期 //        int m[3];    //月份 //        for(line_i=1;line_i<=4;line_i++){    //循环打印每一行             //            //初始化2月天数//            if(is_leap_year(Y)) {//                days[2] = 29;//            }else{//                days[2] = 28;//            }//            //            //初始化w、d、m数组//            int i;//            for(i=0;i<3;i++) {//                d[i] = 1;//                m[i] = (line_i-1)*3+i+1;//                w[i] = (day_of_first(Y,m[i]))%7;//            }//            //            //计算行数:不必算了,都是6行 ////            int r1 =  ((7-(w[0]+days[m[0]])%7)+w[0]+days[m[0]])/7;////            int r2 =  ((7-(w[1]+days[m[1]])%7)+w[1]+days[m[1]])/7;////            int r3 =  ((7-(w[2]+days[m[2]])%7)+w[2]+days[m[2]])/7;////            int rows = max_r(r1,r2,r3);                //            //            print_block_title(line_i);//            print_week_name();            //            //            int block_i,row_i;//            for(row_i=0;row_i<6;row_i++){//                for(block_i=0;block_i<3;block_i++){//                    if(block_i>0){//                        printf("  ");//                    }//                    //                    for(j=0;j<7;j++){//                        if(j>0){//                            printf(" ");//                        }//                        if(row_i==0 && j<w[block_i]){//填充空格 :只有第一行才须要填充空格 //                            printf("  ");//                        }else if(row_i>0 || row_i==0 && j>=w[block_i]){//                            if(d[block_i]<=days[m[block_i]]){//                                printf("%2d",d[block_i]);//                                d[block_i]++;//                            }else{//                                printf("  ");//                            }//                        }//                    }//                }//                //                printf("\n") ;//            }//        }//    }//    //    return 0;//}

另一种写法,大差不差,来自hhky某学长

//参考https://blog.csdn.net/mustuo/article/details/103981084 #include <algorithm>#include <cmath>#include <iostream>#include <map>#include <queue>#include <stack>#include <string>#include <vector>using namespace std;void print_title(int y){    printf("                              %d                              \n\n", y);}void print_block_title(int i){    switch (i) {    case 1:        printf("      January               February               March        \n");        break;    case 2:        printf("       April                  May                   June        \n");        break;    case 3:        printf("        July                 August              September      \n");        break;    case 4:        printf("      October               November              December      \n");        break;    }}void print_week_name(){    printf("Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa\n");}int days[13] = { -1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; //每月的天数int is_leap_year(int y){    if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) {        return 1;    } else {        return 0;    }}int day_of_first(int y, int m){    int w, d = 1;    if (m == 1 || m == 2) {        y--;        m += 12; // m = m + 12;    //一、二月换算成上一年的13,14月    }    int c = y / 100; // 2049取前两个数字20    y %= 100; //2049 取后两个数字 49    w = (((y + y / 4 + c / 4 - 2 * c + (26 * (m + 1)) / 10 + d - 1) % 7) + 7) % 7;    return w;}int main(){    // freopen("ca.out", "w", stdout);    int Y;    while (scanf("%d", &Y) != EOF) {        //title        print_title(Y);        days[2] = is_leap_year(Y) ?  29 : 28;        int w[3]; //每个月的第一天是星期几block        int d[3]; //累计日期,1,2,3,4,5,6,7,8,9,10,11        int m[3]; //月份        //block        for (int line_i = 1; line_i <= 4; line_i++) {            print_block_title(line_i);            print_week_name();            //初始化            for (int i = 0; i < 3; i++) {                d[i] = 1;                m[i] = (line_i - 1) * 3 + i + 1; //找法则,大line和月份进行对应                w[i] = day_of_first(Y, m[i]);            }            for (int row_i = 0; row_i < 6; row_i++) {                for (int block_i = 0; block_i < 3; block_i++) {                    if (block_i > 0) {                        printf("  ");                    }                    for (int j = 0; j < 7; j++) {                        if (j > 0) {                            printf(" ");                        }                        if (row_i == 0 && j < w[block_i]) {                            printf("  ");                        } else if (row_i > 0 || ((row_i == 0) && j >= w[block_i])) {                            if (d[block_i] <= days[m[block_i]]) {                                printf("%2d", d[block_i]);                                d[block_i]++;                            } else {                                printf("  ");                            }                        }                    }                }                printf("\n");            }        }    }    return 0;}