日期类问题之月份牌问题

    xiaoxiao2021-03-26  32

    Problem : 月份牌问题 Time Limit:  1 Sec   Memory Limit:  128 MB Submit:  38   Solved:  11 [ Submit ][ Status ][ Web Board ] Description 这里有一份2011年的月份牌可以参考       January               February               March        Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa                    1         1  2  3  4  5         1  2  3  4  5 2  3  4  5  6  7  8   6  7  8  9 10 11 12   6  7  8  9 10 11 12 9 10 11 12 13 14 15  13 14 15 16 17 18 19  13 14 15 16 17 18 19 16 17 18 19 20 21 22  20 21 22 23 24 25 26  20 21 22 23 24 25 26 23 24 25 26 27 28 29  27 28                 27 28 29 30 31 30 31        April                  May                   June        Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa                 1  2   1  2  3  4  5  6  7            1  2  3  4 3  4  5  6  7  8  9   8  9 10 11 12 13 14   5  6  7  8  9 10 11 10 11 12 13 14 15 16  15 16 17 18 19 20 21  12 13 14 15 16 17 18 17 18 19 20 21 22 23  22 23 24 25 26 27 28  19 20 21 22 23 24 25 24 25 26 27 28 29 30  29 30 31              26 27 28 29 30                                                                                        July                 August              September      Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa                 1  2      1  2  3  4  5  6               1  2  3 3  4  5  6  7  8  9   7  8  9 10 11 12 13   4  5  6  7  8  9 10 10 11 12 13 14 15 16  14 15 16 17 18 19 20  11 12 13 14 15 16 17 17 18 19 20 21 22 23  21 22 23 24 25 26 27  18 19 20 21 22 23 24 24 25 26 27 28 29 30  28 29 30 31           25 26 27 28 29 30 31       October               November              December      Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa                    1         1  2  3  4  5               1  2  3 2  3  4  5  6  7  8   6  7  8  9 10 11 12   4  5  6  7  8  9 10 9 10 11 12 13 14 15  13 14 15 16 17 18 19  11 12 13 14 15 16 17 16 17 18 19 20 21 22  20 21 22 23 24 25 26  18 19 20 21 22 23 24 23 24 25 26 27 28 29  27 28 29 30           25 26 27 28 29 30 31 30 31 请编程实现输出给定年份(1600-2050),给定月份(1-12)的月份牌。 Input 两个数 N M,表示公元N年,M月。 Output 该月的月份牌,注意格式。 Sample Input 2012 12 Sample Output Su Mo Tu We Th Fr Sa                    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<cstdio> #include<iostream> using namespace std; bool isLeap(int y){ if(y%4==0&&y0!=0 || y@0==0) return true; else return false; } int main(){ int y,m; int ms[20]={0,31,28,31,30,31,30,31,31,30,31,30,31}; while(scanf("%d%d",&y,&m)!=EOF){ printf("Su Mo Tu We Th Fr Sa\n"); if(isLeap(y)) ms[2]=29; else ms[2]=28; int sum=0; for(int i=1;i<y;i++) { if(isLeap(i)) sum+=366; else sum+=365; } for(int i=1;i<m;i++) sum+=ms[i]; sum+=1; int flag = sum%7,sum1=0; switch(flag) { //后者比前者多三个空格 case 0: printf(" 1");sum1=1;break; case 1: printf(" 1");sum1=2;break; case 2: printf(" 1");sum1 = 3;break; case 3: printf(" 1");sum1=4;break; case 4: printf(" 1");sum1 = 5;break; case 5: printf(" 1");sum1=6;break; case 6: printf(" 1"); sum1=7;break; } if(sum1%7==0) printf("\n"); //遇到7的倍数要换行 for(int k=2;k<=ms[m];k++){ sum1++; if(sum1%7==0) { //说明这是一行的最后一个 //先输出与前一个数保持距离的空格 printf(" "); if(k>=1&&k<=9) printf(" %d\n",k); else printf("%d\n",k); } else if(sum1%7==1) { //表示这是开头的第一个 if(k>=1&&k<=9) printf(" %d",k); else printf("%d",k); } else{ printf(" "); if(k>=1&&k<=9) printf(" %d",k); else printf("%d",k); } } printf("\n"); } return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-662636.html

    最新回复(0)