24h購物| | PChome| 登入
2009-08-12 21:32:11| 人氣3,716| 回應0 | 上一篇 | 下一篇

萬年曆

推薦 0 收藏 0 轉貼0 訂閱站台

由於是很久之前的文章,不保證一定正確而且沒有討論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;
}   

台長: 來源不明
人氣(3,716) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: 資訊小題目 |
此分類下一篇:聖誕樹
此分類上一篇:生成組合 (遞迴版本)

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文