Problem E: 月份牌
来源:互联网 发布:监控淘宝均价软件 编辑:程序博客网 时间:2024/05/22 05:46
Problem E: 月份牌
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 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
- Problem E: 月份牌
- Problem E
- Problem E
- Problem E
- Problem E
- Problem E
- Problem E
- Problem E
- Problem E
- problem E
- Problem E
- Problem E
- Problem E
- Problem E
- Problem E
- Problem E
- Problem-E
- Problem E
- linux常用相关整合
- WOJ-Problem 1010 - Alternate Sum
- C#快速清除文本框内容的方法
- JAVA学习笔记44——其他容器简介2:HashTable+Properties
- 工作2个半月
- Problem E: 月份牌
- 自考《操作系统概论》之文件管理
- 2321
- 鼠标拖动效果
- Camera 图像处理原理及实例分析
- hybris学习过程-----Preparation
- web.config详解(配置文件节点说明)
- 【Android】Merge讲解与实例
- 普林斯顿算法课第四周作业