POJ1008

此题为水题,只要注意最后一天的处理即可:

代码:

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
1 #include < stdio.h >
2 #include < stdlib.h. >
3 #include < string .h >
4
5 /* typedef struct calendar
6 {
7 int day;
8 char month[10];
9 int year;
10 }CALENDAR; */
11 int main( void )
12 {
13 const char * Haab[ 19 ] = { " pop " , " no " , " zip " , " zotz " , " tzec " , " xul " , " yoxkin " , " mol " , " chen " , " yax " , " zac " , " ceh " , " mac " , " kankin " , " muan " , " pax " , " koyab " , " cumhu " , " uayet " };
14 const char * Tzolkin[ 20 ] = { " imix " , " ik " , " akbal " , " kan " , " chicchan " , " cimi " , " manik " , " lamat " , " muluk " , " ok " , " chuen " , " eb " , " ben " , " ix " , " mem " , " cib " , " caban " , " eznab " , " canac " ,
15 " ahau " };
16
17 int num;
18 int hday,tday;
19 int hmonth,tmonth;
20 char hname[ 10 ],tname[ 10 ];
21 int hyear,tyear;
22 int i,j = 0 ;
23 long sum = 0 ;
24 // CALENDAR *cal;
25
26 scanf( " %d " , & num);
27 printf( " %d\n " ,num);
28 // cal=(CALENDAR*)malloc(sizeof(CALENDAR)*num);
29 for (i = 0 ; i < num; i ++ )
30 {
31 scanf( " %d " , & hday);
32 getchar(); // 去除.
33
34 scanf( " %d %s %d " ,hname, & hyear);
35
36 j = 0 ;
37 while (strcmp(hname,Haab[j]) != 0 )
38 j ++ ;
39 hmonth = j;
40
41 sum = hyear * 365 + hmonth * 20 + hday + 1 ;
42
43 tyear = sum / 260 ;
44 tmonth = sum % 260 ;
45
46 if ((sum >= 259 ) && ((sum % 260 ) == 0 )) // 此处应该特别注意,最后一天的处理,例如260 这天是0年而不是1年
47 {
48
49 tyear -= 1 ;
50 }
51
52 if (tmonth % 20 == 0 ) // 处理整除的情况下应该为最后一个数,而不是第一个数
53 {
54 tmonth = 19 ;
55 }
56 else
57 {
58 tmonth = tmonth % 20 - 1 ;
59 }
60
61
62 tday = sum % 260 ;
63 if (tday % 13 == 0 )
64 tday = 13 ;
65 else
66 tday %= 13 ;
67 strcpy(tname,Tzolkin[tmonth]);
68 printf( " %d %s %d\n " ,tday,tname,tyear);
69
70 // strcpy(cal[i].month,Tzolkin[tmonth]);
71 // cal[i].day = tday;
72 // cal[i].year = tyear;
73 }
74
75
76 /* for(i=0;i<num;i++)
77 {
78 printf("%d %s %d\n",cal[i].day,cal[i].month,cal[i].year);
79 } */
80
81 return 0 ;
82
83 }

特殊测试数据:4. uayet 259
正确输出:13 ahau 364

而不是:13 ahau 365

转载于:https://www.cnblogs.com/arikes/archive/2010/08/27/1810386.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值