泪眼成诗

导航

POJ1008

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

代码:

代码
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

posted on 2010-08-27 20:31  泪眼成诗  阅读(220)  评论(0编辑  收藏  举报