Problem E: 月份牌

来源:互联网 发布:监控淘宝均价软件 编辑:程序博客网 时间:2024/05/22 05:46

Problem E: 月份牌

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 1916 17 18 19 20 21 22  20 21 22 23 24 25 26  20 21 22 23 24 25 2623 24 25 26 27 28 29  27 28                 27 28 29 30 3130 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 1110 11 12 13 14 15 16  15 16 17 18 19 20 21  12 13 14 15 16 17 1817 18 19 20 21 22 23  22 23 24 25 26 27 28  19 20 21 22 23 24 2524 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 1010 11 12 13 14 15 16  14 15 16 17 18 19 20  11 12 13 14 15 16 1717 18 19 20 21 22 23  21 22 23 24 25 26 27  18 19 20 21 22 23 2424 25 26 27 28 29 30  28 29 30 31           25 26 27 28 29 3031      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 1716 17 18 19 20 21 22  20 21 22 23 24 25 26  18 19 20 21 22 23 2423 24 25 26 27 28 29  27 28 29 30           25 26 27 28 29 30 3130 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 1516 17 18 19 20 21 2223 24 25 26 27 28 2930 31

HINT

思路很简单,操作起来却很难!

1.先判断那个年那个月的第一天是星期几

2.排列

注意月份判断要从公元一月一日排起,且公元一月一日是星期一!

具体看这个what day is it

#include <stdio.h>int isleap(int y){    if ((y%4==0&&y%100!=0)||y%400==0)    {return 1;    }else{return 0;}}int main(){int y,m,d,k,x,sum,flag,sum1;int ms[20] = {0,31,28,31,30,31,30,31,31,30,31,30,31,0};     while (~scanf("%d%d",&y,&m))     { sum1=0; printf("Su Mo Tu We Th Fr Sa\n"); if (isleap(y)) { ms[2]=29; } else {             ms[2]=28; } sum=0; for (int i=1;i<y;i++) {              if (isleap(i))              {  sum+=366;              }  else  {  sum+=365;  }  sum%=7; }  for (int j=0;j<m;j++) { sum+=ms[j]; } sum+=1; //printf("%d\n",sum); flag=sum%7; 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(k=2;k<=ms[m];k++)//从第二天开始,一直到ms[m]结束 { sum1++;             if(sum1%7==0) { printf(" "); if(k<=9) { printf(" %d\n",k); }//因为从1-9是单数占一个字符 else { printf("%d\n",k); }//10-31是双数 } else if(sum1%7==1) { if(k<=9) { printf(" %d",k); } else { printf("%d",k); } }//上面是判断每一行的第一个 else {                 printf(" ");  if(k<=9) { printf(" %d",k); } else { printf("%d",k); } } } printf("\n");     }}


0 0