POJ 1008
http://acm.pku.edu.cn/JudgeOnline/problem?id=1008
這是一道關于歷法轉換的問題。從這道題我得到2點收獲:一、題目中月份或者日期是用字符串來表示的,這時利用二位數組可以輕松實現從字符串到數字的轉換;二、Tzolkin中的日期和月數是相互獨立的,可分別取余。
另外,我覺得很重要的一點就是,一定要清楚題目是從0,還是從1開始數的,并且在取余時候關于這方面一定要保持頭腦清醒。很容易出錯。
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 int n;
5 char haabmonth[19][10] = {"pop","no","zip","zotz","tzec","xul","yoxkin","mol","chen","yax","zac","ceh","mac","kankin","muan","pax","koyab","cumhu","uayet"};
6 char tzolkinday[20][10] = {"imix","ik","akbal","kan","chicchan","cimi","manik","lamat","muluk","ok","chuen","eb","ben","ix","mem","cib","caban","eznab","canac","ahau"};
7 int day;
8 char month[10];
9 int year;
10 int main()
11 {
12 scanf("%d",&n);
13 printf("%d\n",n);
14 for(int i = 0;i < n;++i){
15 scanf("%d. %s %d",&day,month,&year);
16 int days;
17 for(int k = 0;k < 19;++k){
18 if(!strcmp(haabmonth[k],month)){
19 days = year * 365 + k * 20 + day;
20 break;
21 }
22 }
23 int m = days % 260;
24 printf("%d %s %d\n",m%13+1,tzolkinday[m%20],days/260);
25 }
26 system("pause");
27 return 0;
28 }
29
code2 #include<string.h>
3 #include<stdlib.h>
4 int n;
5 char haabmonth[19][10] = {"pop","no","zip","zotz","tzec","xul","yoxkin","mol","chen","yax","zac","ceh","mac","kankin","muan","pax","koyab","cumhu","uayet"};
6 char tzolkinday[20][10] = {"imix","ik","akbal","kan","chicchan","cimi","manik","lamat","muluk","ok","chuen","eb","ben","ix","mem","cib","caban","eznab","canac","ahau"};
7 int day;
8 char month[10];
9 int year;
10 int main()
11 {
12 scanf("%d",&n);
13 printf("%d\n",n);
14 for(int i = 0;i < n;++i){
15 scanf("%d. %s %d",&day,month,&year);
16 int days;
17 for(int k = 0;k < 19;++k){
18 if(!strcmp(haabmonth[k],month)){
19 days = year * 365 + k * 20 + day;
20 break;
21 }
22 }
23 int m = days % 260;
24 printf("%d %s %d\n",m%13+1,tzolkinday[m%20],days/260);
25 }
26 system("pause");
27 return 0;
28 }
29