[size=+2]Maya Calendar - W7 c4 `7 m2 A6 s" b: k! UDuring his last sabbatical, professor M. A. Ya made a surprising discovery about the old Maya calendar. From an old knotted message, professor discovered that the Maya civilization used a 365 day long year, called Haab, which had 19 months. Each of the first 18 months was 20 days long, and the names of the months were pop, no, zip, zotz, tzec, xul, yoxkin, mol, chen, yax, zac, ceh, mac, kankin, muan, pax, koyab, cumhu. Instead of having names, the days of the months were denoted by numbers starting from 0 to 19. The last month of Haab was called uayet and had 5 days denoted by numbers 0, 1, 2, 3, 4. The Maya believed that this month was unlucky, the court of justice was not in session, the trade stopped, people did not even sweep the floor. For religious purposes, the Maya used another calendar in which the year was called Tzolkin (holly year). The year was divided into thirteen periods, each 20 days long. Each day was denoted by a pair consisting of a number and the name of the day. They used 20 names: imix, ik, akbal, kan, chicchan, cimi, manik, lamat, muluk, ok, chuen, eb, ben, ix, mem, cib, caban, eznab, canac, ahau and 13 numbers; both in cycles. 1 }; R1 u' u" }+ f+ fNotice that each day has an unambiguous description. For example, at the beginning of the year the days were described as follows: & |6 m4 a: v% N6 N: ?1 imix, 2 ik, 3 akbal, 4 kan, 5 chicchan, 6 cimi, 7 manik, 8 lamat, 9 muluk, 10 ok, 11 chuen, 12 eb, 13 ben, 1 ix, 2 mem, 3 cib, 4 caban, 5 eznab, 6 canac, 7 ahau, and again in the next period 8 imix, 9 ik, 10 akbal . . . 8 p# T" j& ^* g2 c: A9 f5 eYears (both Haab and Tzolkin) were denoted by numbers 0, 1, ... , where the number 0 was the beginning of the world. Thus, the first day was: ( N* J l2 ?) [1 @1 h3 iHaab: 0. pop 0 ! x2 a1 S$ \ z1 `Tzolkin: 1 imix 0 Help professor M. A. Ya and write a program for him to convert the dates from the Haab calendar to the Tzolkin calendar. + q O: q) c" e InputThe date in Haab is given in the following format:NumberOfTheDay. Month Year 9 q4 |) e' u0 [# o% w/ l3 E, |: XThe first line of the input contains the number of the input dates in the input. The next n lines contain n dates in the Haab calendar format, each in separate line. The year is smaller then 5000. + y, J- o: F. ^- v" S ]* zOutputThe date in Tzolkin should be in the following format:Number NameOfTheDay Year - o8 j; u0 U9 ^8 m/ k6 WThe first line of the output contains the number of the output dates. In the next n lines, there are dates in the Tzolkin calendar format, in the order corresponding to the input dates. . n- F! G+ J/ F; g
5 _" n9 Y, i, j/ N3 c( {( n Sample Input310. zac 00. pop 010. zac 1995Sample Output33 chuen 01 imix 09 cimi 2801 . t5 F3 k8 x, h9 d: i# I# \( ~7 U' e
下面是我的代码,虽然繁琐点9 t! j* N8 |* Y0 J& {) |& [
#include <stdio.h> ' i/ K: `* _' J9 m8 m ]' j* U#include <string.h>- o% m. l+ s$ n7 y$ y7 K
void main() " R/ j) c8 c/ A: Z6 _7 S{$ v! `: ^& S2 r1 ^6 Q/ {
int n;//用于记数 . ?( C% H7 S/ u- q9 i" G scanf("%d",&n);% w* ^$ o( c4 k! U( S
printf("%d\n",n);3 D, [# c. ]2 \, M# n
2 i2 h" i5 p7 C- {
while(n--) 2 [" s, c1 ^2 u7 l7 S { 3 q: B% L# n; `+ X) S# |, z( G //定义Haab 的年月日 $ \+ Q' f ?5 o$ m7 K' ~! R& h int day,year; 9 `5 V* r7 m3 c2 a& D6 g char month[10];7 [2 Q1 O# }4 ^4 ?" Q- C
//总共天数 8 w/ a% Q" G6 q+ Q4 w int number;0 w" d4 u7 i7 f4 [& b
- T8 ~ w$ s% e) P& G int i=0;% g3 R1 A" h) e7 l
) h# q: D% w6 m6 D9 }5 R( [
//接收到Haab 的年月日 4 `# {6 @, i, r* R: e scanf("%d",&day); ' `4 r# M+ s* M/ m
while(1)2 k! Z1 ^8 K( o+ @( O+ E
{( T' ?7 ?7 P2 Z5 m
scanf("%c",&month);2 d/ {& g* A' x& O r
if (month>=97&&month<=122) 5 e4 R: A: Y2 u# L J' R! x break;/ q# [- Y- b' w* _
}; s* N! B1 X( ~2 {* u9 o
while(month>=97&&month<=122) ( |( d; I2 b- u, D {+ N' p# {& K$ F# H
i++;$ \# S0 x% e9 p( `
scanf("%c",&month); ( |! m* k( G) m7 R6 u
}( Y# Y6 G e' E; E- l( v+ Q" D
scanf("%d",&year); % f" \3 b: @! { a& V: o r T4 }" l+ l
//方便后面的比较 # t3 N8 `3 Y/ p for(i=0;i<10;i++) 5 s2 Y3 T7 R" r5 W( i { 1 f: f" A! F& D) m9 x# F! ?9 O; F H if(month<97||month>122)! h3 X. {/ k$ D/ P7 s
{+ k* o/ c+ I( Z& E6 ]" T5 D! A9 m
month='\0';" e% T, ?# I' v2 m4 @+ T- j- V
i++; 9 A! g& W6 i" u& T" J% ] } # a9 c9 ]2 C& u0 B1 v0 F7 I } ! R9 e s( Z: \! M - E/ Q$ E9 D. L: J7 ~! U
//定义Haab的月份(英文) 2 b8 V3 B, K- e& x1 g char month1[10]="pop";8 O7 {, o! U s
char month2[10]="no"; 0 r, \' q: p: e0 y char month3[10]="zip"; S9 H+ m ]+ ]* L3 q8 r' d. ~ char month4[10]="zotz";# D5 V9 ?4 _9 ~* x. {( d( q _6 g
char month5[10]="tzec";# e% L4 Z0 u% [$ f
char month6[10]="xul"; " m1 e, l' i! K: i K char month7[10]="yoxkin";! R w3 E; T, ]( R; n
char month8[10]="mol";* B, T9 k6 ?6 E; b
char month9[10]="chen"; % w: T8 }1 D# U/ ~& a3 i0 u/ X2 n char month10[10]="yax"; . Q5 i$ X" R! f, ~ char month11[10]="zac";5 ~/ N3 L! ?$ l+ {9 N3 O# _' y5 k. ]
char month12[10]="ceh";7 w4 B% E2 Y9 x0 p3 J6 v% n# g
char month13[10]="mac";+ u$ @3 q* F$ U- m0 I! V
char month14[10]="kankin";9 D( h) k2 [# ~% |
char month15[10]="muan"; 6 T( o( E* l7 Y7 |$ J& } char month16[10]="pax"; + P) H/ l9 A3 l% T! v char month17[10]="koyab"; + C! {+ D& N5 S6 ~8 W+ A" e$ _ char month18[10]="cumhu"; ' |0 J6 |0 \* c/ C+ G char month19[10]="uayet"; 1 [( b& y8 h. Y+ t" Q ; W: ~/ h( [9 f //定义Haab的月份(数字)1 @3 r% o; d, @$ q7 j
int Month;5 b+ T$ F9 i8 v' j( H+ T
if(strcmp(month,month1)==0)2 s* f9 h8 X; G: i7 k
Month=1; % j: g5 [. p& f, p else if(strcmp(month,month2)==0)3 J. v0 p' M; r O* O' G& B" N
Month=2;1 z1 B& Y5 r; @6 Q0 B# V
else if(strcmp(month,month3)==0) 9 M+ B. _. _' w$ t2 }7 Q2 g Month=3;% W: O! W1 [% g; o
else if(strcmp(month,month4)==0)) @1 P' l9 Y( W8 _9 O& |7 ]
Month=4; # D$ Y8 r# P/ G6 I3 s else if(strcmp(month,month5)==0)* Y3 s+ o3 {8 [) J% L
Month=5;7 r( o6 t N9 [; I- x1 H2 s! G
else if(strcmp(month,month6)==0): c: h- o9 i# ~! I4 a
Month=6;2 U8 k, d) l! X7 v+ v6 g" C! B8 Q
else if(strcmp(month,month7)==0)! l, F4 K" y- ^, O4 m
Month=7;2 P% c5 N# p( X3 E& Y- B
else if(strcmp(month,month8)==0) ' |' G7 ]7 m0 q5 N7 R$ x Month=8; * P! Y B3 P. ]& G( ] else if(strcmp(month,month9)==0) " o" V9 U4 A# \- S8 O2 g @ Month=9;1 @" c) k& z3 y2 R' x+ r
else if(strcmp(month,month10)==0) - |* W- q) X+ I/ D" R* `& L Month=10; . `0 {/ b! M8 W7 ] else if(strcmp(month,month11)==0)% b) J7 T' t: j: F; q
Month=11;2 L1 P' x1 l4 `0 f9 |2 _; q
else if(strcmp(month,month12)==0) 4 N8 H! u+ t9 F/ D Month=12; : f* i, Z; J, @ else if(strcmp(month,month13)==0)# A" G, C: l/ T! S
Month=13;' Y0 e3 G) W: l
else if(strcmp(month,month14)==0)* [# V1 A2 t# Q# l0 @
Month=14; 1 v( c# x9 ^9 E5 V$ R0 T* k8 D else if(strcmp(month,month15)==0) 1 O$ I8 w3 M3 c' X- v Month=15; 2 h$ m: u% F1 }1 I4 u else if(strcmp(month,month16)==0)& S5 V* K$ n* c( l; T. e
Month=16; ; j# c6 A( a. R+ d5 x1 {! | else if(strcmp(month,month17)==0)3 S: q; |5 @" x$ z( i/ N
Month=17; + e$ y; ]4 ^8 ?) U else if(strcmp(month,month18)==0)5 p/ d+ ^* b! Z* ]# g; ?- _
Month=18;: L' ?4 H6 }& v! y" I
else if(strcmp(month,month19)==0)+ |! b. W5 i, l
Month=19; 3 h3 A( A, V& G& E( E" L N; v' n$ n3 j# T0 e3 Q
//定义Tzolkin9 n# o+ z0 ]9 k
int new_year; 6 F: I" C6 E; H9 ?6 A9 G3 N* Q# V int new_day_Name;- _% r4 v5 a$ y1 k d- m
int new_day_number; # S/ z: `4 L( c/ W1 E" O( W4 c0 D- W4 A. b/ H* L7 L
//计算总共天数 # L1 F1 U) v2 R number=day+1+(Month-1)*20+year*365; $ w6 Q: z; t& v. u, p& j1 N% U9 z8 g/ w+ Y
//计算Tzolkin所需值 6 L7 [' H( u& A2 ?: { new_year=number/260; 7 {0 a( ?+ h" M+ u, S/ U% @- W y3 d new_day_Name=number%20; 1 F9 n' a! _! }2 @ if(number%13!=0) N8 }: d& s9 K+ @' ~
new_day_number=number%13; * r# ^0 ?. H q1 v, P- ]) Q: U6 ~& @# i
else new_day_number=13; a. P* D+ n, Z# Y2 O: L* @ 6 a# K" A$ G4 }/ r- D6 d( J
//定义所得Tzolkin某一天的名字 , X! I9 d0 V6 j% K( \ char new_day_name[10];, `6 t- {$ N/ i. @! t
/ E* n. `& v* t //得出Tzolkin那一天的名字 " K- M, j0 x) H if (new_day_Name==1)1 u. e1 T) p' S4 E: T
strcpy(new_day_name,"imix");; q! X8 U" [- Y
else if (new_day_Name==2)9 i% q# E( p$ k6 p4 L
strcpy(new_day_name,"ik");7 s4 Z- O" S( G5 W
else if (new_day_Name==3)2 P% q) v0 o& F1 f
strcpy(new_day_name,"akbal");5 W% j* _6 s) I8 ~
else if (new_day_Name==4) & z% _% r. \' q, H strcpy(new_day_name,"kan"); * r! u: I. e1 d# r2 F else if (new_day_Name==5) - z6 r2 W6 X ]0 [ strcpy(new_day_name,"chicchan");0 N; }& ]0 f+ l2 i, V8 V2 b
else if (new_day_Name==6)4 L$ w, o7 D ^* P ]/ H- `
strcpy(new_day_name,"cimi");4 `- A0 {3 }7 w$ |! {
else if (new_day_Name==7) " V+ N8 i; S2 @2 p* R strcpy(new_day_name,"manik");) X) |, z/ ~; v+ L4 m
else if (new_day_Name==8) ( Z" K A" _" T% k7 ] strcpy(new_day_name,"lamat"); * N9 W( u( V! T2 p) c else if (new_day_Name==9) / G# x! K% L! }; G# D$ W strcpy(new_day_name,"muluk"); 1 p h+ b' t9 z% I0 O else if (new_day_Name==10) 0 f4 T2 Z" |- W) i strcpy(new_day_name,"ok"); & x5 U" H8 J) G: q& o* t else if (new_day_Name==11) 6 j3 r0 i. J# D' h$ h strcpy(new_day_name,"chuen"); : B' T' }& H( ?6 P5 Y else if (new_day_Name==12) 9 d$ T* z9 _, A+ M3 R strcpy(new_day_name,"eb"); & R6 x- R/ x8 b4 e else if (new_day_Name==13) 9 v( U# } l/ o& ~; K strcpy(new_day_name,"ben"); Y' Q, G- F; E5 g# H x3 t else if (new_day_Name==14) 7 ^; ~ t; J" Y: D9 z strcpy(new_day_name,"ix");- j+ a3 x2 I `) r; T3 w% R
else if (new_day_Name==15)4 a+ `% a2 N3 a# e6 g6 a D7 ]. U
strcpy(new_day_name,"mem");; e( u, m: G, V1 F, O0 n
else if (new_day_Name==16)& |$ M+ s# E9 y
strcpy(new_day_name,"cib");) J& l' N C# J5 y5 B
else if (new_day_Name==17) 8 k/ K! |! P) J) _2 o" ? strcpy(new_day_name,"caban"); " [ q) T4 @$ L" R else if (new_day_Name==18) # X# x8 A) {3 @ strcpy(new_day_name,"eznab");# U: |; U' q/ i6 q
else if (new_day_Name==19)0 }4 A" C; w7 i7 p" u% f
strcpy(new_day_name,"canac"); ! [+ W' m8 A% T else if (new_day_Name==0); l& p U' z4 R7 N
strcpy(new_day_name,"ahau"); 9 h6 U, t- h' W$ q6 M ( l2 `" } [5 X F* ?; J( [7 h . c0 f; L; k: n5 M$ f7 m! k //得出结论 + D9 X. j) l- ~( \2 a printf("%d ",new_day_number);" @. b! v- z6 R2 i+ A; ~0 g, f* i
printf("%s",new_day_name); " w) a: I) S; O printf(" %d",new_year); % z7 S+ c) G, {8 I printf("\n");6 ?7 J6 ?6 l- f# r- s& z. F% X
}+ U9 i$ [6 ]: t
Hundred 发表于 2014-2-20 17:22 3 b$ U7 P3 K( `) f1 t1 E/ z8 {: m0 M
我去。。我终于知道哪里错了。。不应该是new_year=number/260。。。而应该是4 v: \% E# W. |/ ?! B Z! x
if(number%260==0)5 l9 r |5 p5 `- U2 B: t, V
...