萬年曆
由於是很久之前的文章,不保證一定正確而且沒有討論1752年以前
範例輸入 :
2009 8 12
2009 10 28
範例輸出 : /*由於中文是寬字元 在此無法對齊 在編譯時OK*/
|日|一|二|三|四|五|六
| 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
2009 8 12 星期三
|日|一|二|三|四|五|六
| 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
2009 10 28 星期三
/************************************************************/
#include<stdlib.h>
#include<stdio.h>
int main()
{
int yy,mm,dd,temp=-1,time,flag=0,flag1=0,day;
int a,b,c,x=0,y;
int sum;
while(scanf("%d %d %d",&yy,&mm,&dd)==3)
{flag=0;flag1=0;
printf("|日|一|二|三|四|五|六\n");
temp=(yy-1)/4-(yy-1)/100+(yy-1)/400+yy-1; /*每年多一天 該年不用算*/
time=temp%7+1; /*該年的1月1日星期移到哪裡了*/
if(yy%4==0&&yy%100!=0||yy%400==0)
flag=1; /*求該年2月所需天數*/
switch(mm-1)
{
case 1: day=31; y=28+flag;break; /*該年幾天? 該月天數*/
case 2: day=59+flag; y=31;break; /*算到前一個月的*/
case 3: day=90+flag; y=30;break;
case 4: day=120+flag;y=31;break;
case 5: day=151+flag;y=30;break;
case 6: day=181+flag;y=31;break;
case 7: day=212+flag;y=31;break;
case 8: day=243+flag;y=30;break;
case 9: day=273+flag;y=31;break;
case 10: day=304+flag;y=30;break;
case 11: day=334+flag;y=31;break;
case 0: day=0;y=31;break;
}
time=(time+day)%7+1; /*該月的1號在哪裡*/
for(b=0;b<=3*(time-1)-1;b++) /*決定空格[還沒開始]*/
printf(" ");
x=(time-1);
for(c=1;c<=y;c++)
{
if(x==7)
{
printf("\n");x=0;
}
printf("|%2d",c);
x++;
if(c==dd) sum=x;
}
printf("\n%d %d %d ",yy,mm,dd);
switch(sum-1)
{
case 0:printf("星期日");break;
case 1:printf("星期一");break;
case 2:printf("星期二");break;
case 3:printf("星期三");break;
case 4:printf("星期四");break;
case 5:printf("星期五");break;
case 6:printf("星期六");break;
}
printf("\n");
}
return 0;
}
上一篇:生成組合 (遞迴版本)
下一篇:聖誕樹