数学建模社区-数学中国

标题: 一道简单的ACM题,不过做了很久不知道为什么会是wrong answer,跪求解释啊 [打印本页]

作者: Hundred    时间: 2014-2-19 18:00
标题: 一道简单的ACM题,不过做了很久不知道为什么会是wrong answer,跪求解释啊
[size=+2]Maya Calendar
- i) p8 y2 ~$ b: }During 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.   q  E* F6 n# J/ ?
Notice that each day has an unambiguous description. For example, at the beginning of the year the days were described as follows:
$ Z! F9 \8 ~5 W* }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 . . .
& S# A! u* l/ 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: 8 V3 h' q6 X* h3 U
Haab: 0. pop 0
8 X. g- c! X3 xTzolkin: 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.
6 q. n; `9 ~4 i6 x: z7 SInputThe date in Haab is given in the following format:NumberOfTheDay. Month Year$ z9 B0 p- f2 O: q! |$ P- x  e& `6 ^
The 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. 6 l- m- y" H3 v- \+ Z
OutputThe date in Tzolkin should be in the following format:Number NameOfTheDay Year8 g* l' B/ G8 F& n# I( o
The 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.
8 L1 A0 E. _0 _  ?8 `* j1 v9 S
! ?, x6 r: a+ Y$ m5 dSample Input310. zac 00. pop 010. zac 1995Sample Output33 chuen 01 imix 09 cimi 2801
( F1 ^2 X$ N& x2 Y( O* }" i
, w* e+ s; c! ^) e) W下面是我的代码,虽然繁琐点
# J; F" L' V* e! j- y5 L3 m#include <stdio.h>; N9 Y; _$ c" {+ k2 E6 y
#include <string.h>- Z! s. u: J+ F! L" m: t% p
void main()3 C* ?7 m9 u4 Q( @0 u
{3 e: D  `- y! L( ^
        int n;//用于记数3 S2 n/ L$ O0 }
        scanf("%d",&n);$ c2 }5 s- h/ Q( m) t0 r# r
        printf("%d\n",n);. G0 Y& b" S8 p# e, b% s
9 |5 K* Z5 U# `; Z! C( X
        while(n--)
' }! l2 J( a; \8 z        {
# C5 V; \! U. ?1 P8 c        //定义Haab 的年月日# Y5 X+ \0 L) d- m
                int  day,year;  
; M+ m7 g) @3 q2 {: A8 i+ t                char month[10];% T. w1 Y8 X% J: d6 @
            //总共天数
% u7 F( b! L' r4 E                int number;
2 j# T9 W  D+ K9 e5 F/ S: K7 G# g2 r' c4 z% E2 O3 S
            int i=0;( o$ ?/ l' {$ |2 W% P# z6 k

$ \/ L+ B* f! h& H* p6 V            //接收到Haab 的年月日
6 x1 I9 {# U0 A                scanf("%d",&day);       
1 E% ?- g3 \5 W% B! C( c. r8 a; F        while(1)
+ ~" f9 u5 I" v; W4 q: ^                {( G& W) t. M" M% w! J/ u  ^
                        scanf("%c",&month);
0 y  y2 s6 b4 N1 ^7 B5 Y% G                        if (month>=97&&month<=122); @! R6 @  V% E0 ?( J  w
                                break;
3 P$ ~# p5 w' `6 P" s) ]: I                }2 g# \& ~" q, a/ r
                while(month>=97&&month<=122)0 h: Y9 Y& Q% d
                {
* {0 @8 }' G+ ]0 B                        i++;) h* Y6 T  ~5 _* E& y! o2 `8 p
                        scanf("%c",&month);        : X( ^* C' }0 @; F$ `
                }
; f; s' X6 V9 p. l2 {/ R2 M            scanf("%d",&year);/ r* Q% i: V' ^
+ x- e+ n* e5 W# R7 A+ q, `7 {( e
            //方便后面的比较
0 s$ m1 N1 b5 @! @5 J                for(i=0;i<10;i++)$ Q" Y$ L0 P. G# M8 W
                {
( _4 d7 h" ]' G                        if(month<97||month>122)
  C7 z7 |$ j: n9 _3 I8 m8 {                        {
- E! X& Z% _# n                                month='\0';( k0 u1 Y4 `8 v2 O
                                i++;/ y1 |( }; O' Y) m  t
                        }
1 R1 [$ N- l1 t4 O0 ?% P                }7 `: M+ v" k' b( ]# ]1 E' `( C/ x# E
               
. q$ G, p# ]+ {+ L                //定义Haab的月份(英文)
% F5 N; c- ?8 e( x' D" u                char        month1[10]="pop";
/ k& r/ _7 g, o$ L                char    month2[10]="no";
; E, b+ g8 Y' [. c! `# V: {                char        month3[10]="zip";
0 H; T- K$ d& I# _0 F& M( p                char    month4[10]="zotz";0 v: }4 |0 m7 B1 S+ A
                char        month5[10]="tzec";
( d7 V0 V5 w/ ~+ O/ A0 w6 N) q                char    month6[10]="xul";. f9 r# i; }; f9 [
                char        month7[10]="yoxkin";
7 m- [  t" V% Z: G% j$ i' S                char    month8[10]="mol";1 r% `  W4 K/ l7 N
                char        month9[10]="chen";
# s! g3 Q& M! J  n' M' G" W9 P                char    month10[10]="yax";- r0 e. p5 x3 f2 x: N* l
                char        month11[10]="zac";* a( |, l* H% Z6 Q
                char    month12[10]="ceh";
6 h% I( C+ ^7 {% F5 ]+ p                char        month13[10]="mac";
7 ?/ S; I& K0 V3 G1 w( p                char    month14[10]="kankin";( ]3 d  b; G0 l8 Z! i$ d
                char    month15[10]="muan";4 S+ H# a+ t1 J; Q# K" _7 O* h
                char        month16[10]="pax";; z* q, J! u7 L5 v
                char    month17[10]="koyab";3 w5 n' ]$ y! d, ?  R
                char        month18[10]="cumhu";8 R8 X/ u7 F. N$ l1 G8 U1 Y, [; ]1 V
                char    month19[10]="uayet";
: `4 l2 J- F7 ~& l, x4 Q6 A
$ t8 y- M2 F" t$ j- S( }                //定义Haab的月份(数字)
4 D; Z/ O3 S3 O# x                int Month;
/ d* y' B: U, u$ J( c( o                if(strcmp(month,month1)==0)# x5 I0 E8 \4 E- \8 K
                        Month=1;
" @1 X- `! X. B7 r                else if(strcmp(month,month2)==0)
3 ~$ O; F# [, \1 d# {2 l, w                        Month=2;1 S( g1 T1 {/ D. Y! `7 N
                else if(strcmp(month,month3)==0)0 `5 e' G; M" [, B" V+ [# `7 \
                        Month=3;
6 j! b2 {" i- y9 k4 d  N: ~; _                else if(strcmp(month,month4)==0)
  Y8 M6 c# u% I, T: l                        Month=4;                1 Q, n3 Q, S7 D! y9 d; x) J
                else if(strcmp(month,month5)==0)3 G( x+ @. H* x5 ]
                        Month=5;, P( P( F& ^: d/ I
                else if(strcmp(month,month6)==0)+ s" i" H: L7 X4 U: `' T+ a: M
                        Month=6;* f* j: T: C0 {' o$ g) \# v
                else if(strcmp(month,month7)==0)1 F* F/ e2 G2 n/ C# T
                        Month=7;
( f" C. P$ I/ K8 H$ h                else if(strcmp(month,month8)==0)
+ u$ M. n  y- w; ?6 x) c                        Month=8;
% ^2 `; C. P- }0 o2 V- g' T& ?& E                else if(strcmp(month,month9)==0)3 g- ?0 h- |8 L$ R0 P
                        Month=9;3 G# t6 r5 a4 m* _0 n; h
                else if(strcmp(month,month10)==0)
5 f. g9 Z: W6 ^- x' K5 g; w                        Month=10;# ?2 M/ P; h+ r/ h$ q
                else if(strcmp(month,month11)==0): B5 I6 V1 ]+ _2 Q( [0 l
                        Month=11;
6 R* _9 d) x7 e) o2 x% e                else if(strcmp(month,month12)==0)% k: i% F' y" l) ]" W
                        Month=12;
# u4 i1 M* l0 b3 g! I; Q7 Y                else if(strcmp(month,month13)==0)
* E! V3 }1 u' n                        Month=13;
, ?& s- d3 F) k# l, D, _! I                else if(strcmp(month,month14)==0)2 V, r. b: s  X, n# V, c# f. ?
                        Month=14;9 E2 L) ], K) d
                else if(strcmp(month,month15)==0)
% ~* V* _+ ?# b  K! S- A                        Month=15;! z/ x6 n3 f  N7 y$ u; S6 ?) {
                else if(strcmp(month,month16)==0)$ W) W, t2 }. h& e
                        Month=16;
& T. A) X0 t2 o( p9 o                else if(strcmp(month,month17)==0)# y& \2 o2 E5 v6 W
                        Month=17;
  m0 p& I/ ^( M                else if(strcmp(month,month18)==0)
: F' K# c. p. y                        Month=18;; y* Z! |* D, e0 B" O' ^! x- w
                else if(strcmp(month,month19)==0)$ [$ F) C5 P! Q( A6 D  A: u
                        Month=19;/ q6 j; j9 s, s! q' M1 `$ C

% @# @) t2 A- G: i        //定义Tzolkin
2 A& h0 {8 G# S6 ~$ @                int new_year;% m7 k5 Y0 D% ?5 y  a) r
                int new_day_Name;
+ d8 ~& I2 R3 D( u3 m* v4 }                int new_day_number;
' r2 k4 l% V0 p: Z' O8 m4 b, U
/ L! ]' w' Y1 u* Q5 a; \" `6 h                //计算总共天数0 l& o$ ~0 {; T5 O& P& r/ _
                number=day+1+(Month-1)*20+year*365;7 l; a/ T6 c7 n) }, ]
0 `: r& n. \8 p
                //计算Tzolkin所需值4 p5 E; H& z* v$ M& q
                new_year=number/260;
+ o: M& O: p/ I6 S0 Z+ n                new_day_Name=number%20;  $ {, z) Y6 [2 \9 a* R! Z7 n; `8 A
                if(number%13!=0)% m2 l. B! H. q8 s9 ~; u4 k
                        new_day_number=number%13; # ?- p. x6 Z9 \9 O7 J
                else  new_day_number=13;, U7 V4 g7 H1 H! s! Y! t* T2 [8 u
                 & Q, |/ R' J, {: s& ~. |
            //定义所得Tzolkin某一天的名字8 y' u7 a: S8 b3 |5 N) ~8 o
                char  new_day_name[10];% J$ u% M5 e2 }2 @

5 _/ k2 g& O# i" `$ E4 G: b! N                //得出Tzolkin那一天的名字5 ?. O1 A: r3 C- ]
                if         (new_day_Name==1)
" y6 |5 q4 ^( F" q" {. C" W) Z6 n5 @" T& f                        strcpy(new_day_name,"imix");- k* o2 L- j) a, v" h5 h% Q
                else if         (new_day_Name==2)/ i: ?8 ?8 W: F
                        strcpy(new_day_name,"ik");
7 C" c3 q' k/ O% d                else if         (new_day_Name==3)
) D. b1 O% x, T! n. N                        strcpy(new_day_name,"akbal");% N# {) }0 u) {& P  K, D- H6 [
                else if         (new_day_Name==4)
/ f) c) n; H+ ^0 c                        strcpy(new_day_name,"kan");
" A+ {& }: Z3 v                else if         (new_day_Name==5). F" G) {: J8 b" b
                        strcpy(new_day_name,"chicchan");
. y' B9 u- M% j                else if         (new_day_Name==6)0 j% o% R9 T; J6 ~* |9 N
                        strcpy(new_day_name,"cimi");, z" m. S' G. J, }! h- r+ c: ^
                else if         (new_day_Name==7)
+ U! N6 n7 v9 q  Q7 M8 e& k                        strcpy(new_day_name,"manik");) Q  Q; Q# r4 `) @: m
                else if         (new_day_Name==8)2 p$ `. k3 ?' B8 E. v9 E
                        strcpy(new_day_name,"lamat");
! G7 f, F7 @% i0 \2 q3 w                else if         (new_day_Name==9)* H  M4 t9 B# o1 u+ C9 P" w4 s
                        strcpy(new_day_name,"muluk");0 |; P4 C8 r7 [1 b( \
                else if         (new_day_Name==10)* ]3 }* ~3 M' }; |% [4 J  R
                        strcpy(new_day_name,"ok");
/ ?8 R5 z3 d+ O  d) q6 P: b                else if         (new_day_Name==11)" z0 G, R- M, @. S- L4 x
                        strcpy(new_day_name,"chuen");, S* J1 \5 X# y
                else if         (new_day_Name==12)
: \; p6 ^: r# Y! B0 b. G" M                        strcpy(new_day_name,"eb");4 T; @  ^% l  I# r' `6 @* T$ G- v" W
                else if         (new_day_Name==13)" i5 s3 M6 F* ^
                        strcpy(new_day_name,"ben");
9 B% T: a0 o1 R: [                else if         (new_day_Name==14)/ |+ c3 W  a  x4 O
                        strcpy(new_day_name,"ix");
2 q5 E7 V: W& U2 d- z                else if         (new_day_Name==15), k; ^! @% g" G) C# b( a( F/ e* x
                        strcpy(new_day_name,"mem");
# g, M1 E$ }- |0 h* w" v) }2 a                else if         (new_day_Name==16). B# c& Y& F8 h- q; u6 |0 b
                        strcpy(new_day_name,"cib");
' l7 C# }% I5 L. y6 z                else if         (new_day_Name==17)
, }  w% L# Y& j8 y6 w. T                        strcpy(new_day_name,"caban");/ d  B7 i, z2 `1 ?0 j
                else if         (new_day_Name==18)/ O: k  x) s$ y$ U% ?" r
                        strcpy(new_day_name,"eznab");
  v( C  A5 Q9 P1 ]4 H' G- d/ M# H                else if         (new_day_Name==19)
& X3 P& g! `6 `                        strcpy(new_day_name,"canac");
# M  B# V5 i; P% x                else if         (new_day_Name==0)& t& [' K% N% X3 e
                        strcpy(new_day_name,"ahau");" w5 K: I  v7 |' Y
  l8 r" J6 o$ l- O2 K# @

4 f, }/ w$ R9 \: A) u                //得出结论6 f5 U, L/ R. V/ c8 ^
                printf("%d ",new_day_number);
/ ?( h$ D  ^+ F. I) d: J0 u% I                printf("%s",new_day_name);
* h3 k/ z) x9 f- J, {, a" p                printf(" %d",new_year);        ' L/ E& f8 T+ o& V( v5 P
                printf("\n");
- x$ Q8 |- }. V% u        }
( h! t; ~8 X+ |        ; U6 K9 f0 p. D* O
}
; _( S2 o- E/ ]5 g
% W( @7 J2 _: h* v& a7 ?
& N3 D  c1 u. e
作者: 慢跑20    时间: 2014-2-20 16:04
你做的南洋理工,还是杭电的OJ?
7 j7 I7 T3 \' G, G2 JOJ要求比较苛刻
作者: Hundred    时间: 2014-2-20 16:47
慢跑20 发表于 2014-2-20 16:04
# c# B0 [! z% j5 O5 \$ q$ y& r你做的南洋理工,还是杭电的OJ?' K0 V1 L7 j7 t6 q1 s4 Y8 }
OJ要求比较苛刻
) h+ `9 S8 i; C
天津大学的。。。我检查了很长时间都不知道怎么会出错。。。
作者: Hundred    时间: 2014-2-20 17:22
慢跑20 发表于 2014-2-20 16:04 * n, A3 a: u" Z* U! J
你做的南洋理工,还是杭电的OJ?" G' A& O. _: b9 y/ y
OJ要求比较苛刻
+ `; v) C6 U3 Z$ m7 r: ^9 [! \
我去。。我终于知道哪里错了。。不应该是new_year=number/260。。。而应该是
% u# s+ w1 K# K8 h# h1 m. W! Cif(number%260==0)
6 x' _0 R; D) m+ o      new_year=number/260-1;
/ G5 q, u# y! e1 K5 }) G) M  lelse  8 B9 M6 B7 ?) v" P% b' U7 F8 I; f5 t
     new_year=number/260;2 ^# c& C7 z, d  Y
这种小错误废了我好几个小时啊,,,
作者: 慢跑20    时间: 2014-2-20 20:49
Hundred 发表于 2014-2-20 17:22
* O6 y# e$ T5 x" Q& j, B我去。。我终于知道哪里错了。。不应该是new_year=number/260。。。而应该是+ h& L! g$ }0 Z
if(number%260==0)
3 Y) ?! o! h9 i+ x     ...

1 Z. ?4 p* i$ ?) Y8 T) Z+ z嗯。加油!* n: @! f/ M; r* n- O
下次避免这种错误就好了、
作者: XIAOFENG2013    时间: 2014-3-16 22:49
打这么多累吧,给个劳动奖章
作者: XIAOFENG2013    时间: 2014-3-16 22:49
打这么多累吧,给个劳动奖章
作者: MichaeLonger    时间: 2014-7-4 16:59
路过。。。
作者: MichaeLonger    时间: 2014-7-4 16:59
看看。。。
作者: MichaeLonger    时间: 2014-7-4 16:59
看不懂。。。
作者: MichaeLonger    时间: 2014-7-4 16:59
英语渣。。。
作者: MichaeLonger    时间: 2014-7-4 16:59
看起来好屌
作者: 逝水-留痕    时间: 2014-8-7 13:50
很厉害的样子
作者: ShadowIterator    时间: 2016-10-3 17:37
加油加油!& U/ g3 a% F4 M; h! Y6 t+ I





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5