首页 > 学院 > 开发设计 > 正文

日期类问题之月份牌问题

2019-11-11 06:55:39
字体:
来源:转载
供稿:网友
PRoblem : 月份牌问题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  52  3  4  5  6  7  8   6  7  8  9 10 11 12   6  7  8  9 10 11 129 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  43  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  33  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  32  3  4  5  6  7  8   6  7  8  9 10 11 12   4  5  6  7  8  9 109 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 Input2012 12Sample OutputSu Mo Tu We Th Fr Sa                   12  3  4  5  6  7  89 10 11 12 13 14 1516 17 18 19 20 21 2223 24 25 26 27 28 2930 31 具体思路:本题就是一个日期类问题,注意闰年和平年的二月份天数的表示,还有的技巧就是如何控制输出。注意公元一月一日是星期一,直接从这一天往后推即可。 
#include<cstdio>#include<iostream>using namespace std; bool isLeap(int y){	if(y%4==0&&y%100!=0 || y%400==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;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表