讨论 / 181818大哥你来看看,叫我怎么AC?!
lizhixin 2010-10-04 00:07:00
点我顶贴 收藏 删除
测试结果5: 通过本测试点|有效耗时46:ms

测试结果6: 测试结果错误.错误结果为:a hundred and twenty-one billion thirty-two million forty-three thousand a hundred and fifty-four

正确结果应为:a hundred and twenty-one billion and thirty-two million and forty-three thousand a hundred and fifty-four

这个点,billion,million,thousand,后怎么能跟AND呢?

按常规应该不跟吧?

测试结果7: 测试结果错误.错误结果为:a hundred and sixty-five billion a hundred and seventy-six million a hundred and eithty-seven thousand a hundred and ninety-nine

正确结果应为:a hundred and sixty-five billion a hundred and seventy-six million a hundred and eighty-seven thousand a hundred and ninety-nine

这个点,我的好象和答案一样,但是你多了个空格.

测试结果8: 测试结果错误.错误结果为:a hundred billion two hundred million three hundred and a thousand four hundred and ten

正确结果应为:a hundred billion two hundred million three hundred and one thousand four hundred and ten

这个错的是a thousand 这个没道理啊,你样例里就是a thousand...

(样例:a hundred and eighty-one million eight hundred and a thousand eight hundred and eighteen point one eight one eight)

#1 DarkMaster@2008-08-08 20:47:00
回复 删除
回LS,多空格不是问题,因为我没有空格照样AC,还有百位为0的时候也需要and,除了这个数出现在数字首位。

第八个点的数字应该是100,200,301,410千位应该是three hundred and one而不是three hundred and a。

#2 Aaron_Kaka@2008-08-08 20:48:00
回复 删除
十分同意LZ!!!!

这是什么怪题?!!!

#3 DarkMaster@2008-08-08 20:56:00
回复 删除
其实这题要AC也不难,关键是耐心和细心。^_^~~
#4 lizhixin@2008-08-08 20:57:00
回复 删除
但是,样例181,801,818.1818就是

eight hundred and a thousand这样啊

#5 binarie@2008-08-08 21:00:00
回复 删除
额。。

好像是有点问题。。。

#6 binarie@2008-08-08 21:01:00
回复 删除
program p235;

Const

en:array[0..9] of string = (’zero’,’one’,’two’,’three’,’four’,’five’,’six’,’seven’,’eight’,’nine’);

enx:array[1..9] of string = (’a’,’two’,’three’,’four’,’five’,’six’,’seven’,’eight’,’nine’);

et:array[0..9] of string = (’zero’,’ten’,’twenty’,’thirty’,’forty’,’fifty’,’sixty’,’seventy’,’eighty’,’nin’+’ety’);

ev:array[1..9] of string = (’eleven’,’twelve’,’thirteen’,’fourteen’,’fifteen’,’sixteen’,’seventeen’,’eighteen’,’nine’+’teen’);

var

chi:string;point:string;zs:boolean;

function Char2Pos(c:char):integer;

begin

if(c=’D’)then Char2Pos:=1;

if(c=’S’)then Char2Pos:=2;

if(c=’B’)then Char2Pos:=3;

if(c=’Q’)then Char2Pos:=4;

if(c=’W’)then Char2Pos:=5;

if(c=’Y’)then Char2Pos:=9;

end;

function Chi2Num(c:string):string;

var

n:array[1..13] of integer;

j,t:integer;buf:string;

begin

fillchar(n,sizeof(n),0);

buf:=’’;

c:=c+’D’;

for j:=1 to length(c) do

begin

if(ord(c[j])>=48)and(ord(c[j])<=58)then

buf:=buf+c[j]

else

begin

val(buf,t);

if(c[j]<>’D’)and(t=0)then t:=1;

buf:=’’;

inc(n[Char2Pos(c[j])],t);

if(c[j]=’D’)then break;

end;

end;

for j:=1 to 12 do

if(n[j]>=10)then

begin

inc(n[j+1],n[j] div 10);

n[j]:=n[j] mod 10;

end;

t:=0;

Chi2Num:=’’;

for j:=12 downto 1 do

begin

if(n[j]>0)then inc(t);

if(t>0)then

begin

str(n[j],buf);

Chi2Num:=Chi2Num+buf;

end;

end;

end;

function Num2Eng(s:string;one1,wa:boolean):boolean;

var

t,j:integer;

begin

val(s,t);

if(t>0)then Num2Eng:=true;

if(t=0)then exit(false);

if(t>=100)then

begin

write(enx[t div 100],’ hundred’);

end;

if(t mod 100>0)and(t>100)then

write(’ and ’)

else

if(t<100)and(wa=true)then

write(’and ’);

t:=t mod 100;

if(t>0)then

begin

if(t mod 10=0)then

write(et[t div 10])

else

begin

if(t<10)then

begin

if(length(s)<3)and(one1=true)then

write(enx[t])

else

write(en[t]);

end

else

begin

if(t<20)then

write(ev[t-10])

else

write(et[t div 10] + ’-’ + en[t mod 10]);

end;

end;

end;

end;

function ProcPoint(s:string):string;

var j:integer;

begin

ProcPoint:=’’;

if(length(s)>0)then ProcPoint:=’ point’;

for j:=1 to length(s) do

ProcPoint:=ProcPoint+’ ’+en[ord(s[j])-48];

end;

begin

readln(Chi);

if(pos(’D’,Chi)>0)then

point:=ProcPoint(copy(Chi,pos(’D’,Chi)+1,length(Chi)));

if(pos(’Y’,Chi)>0)then

Chi:=Chi2Num(copy(Chi,1,pos(’Y’,chi)-1))+copy(Chi,pos(’Y’,chi),length(Chi));

if(pos(’W’,Chi)>0)then

Chi:=copy(Chi,1,pos(’Y’,chi))+Chi2Num(copy(Chi,pos(’Y’,chi)+1,pos(’W’,chi)-pos(’Y’,chi)-1))+copy(Chi,pos(’W’,chi),length(Chi));

Chi:=Chi2Num(Chi);

if(Chi=’0’)or(length(Chi)<1)then writeln(’zero’);

if(length(Chi)<12)then

Chi:=copy(’000000000000’,1,12-length(Chi))+Chi;

if(Num2Eng(copy(Chi,1,3),true,false)=true)then

begin

write(’ billion ’);

zs:=true;

end

else

zs:=false;

if(Num2Eng(copy(Chi,4,3),true,zs)=true)then

begin

write(’ million ’);

zs:=true;

end

else

zs:=false;

if(Num2Eng(copy(Chi,7,3),true,zs)=true)then

begin

write(’ thousand ’);

zs:=true;

end

else

zs:=false;

if(Num2Eng(copy(Chi,10,3),false,zs)=true)then write();

write(point);

end.

#7 DarkMaster@2008-08-08 21:05:00
回复 删除
反正是有点问题,我也是搞了一个下午,这题还是需要点RP的。。
#8 lizhixin@2008-08-09 01:10:00
回复 删除
这个题呀,比较练人的....=-=

78184 lizhixin 235 Accepted 100分 FreePascal Xeond[6] 查看

78165 lizhixin 235 Unaccepted 90分 FreePascal Xeond[6] 查看

78163 lizhixin 235 Unaccepted 90分 FreePascal Xeond[6] 查看

78080 lizhixin 235 Unaccepted 70分 FreePascal Xeond[6] 查看

78065 lizhixin 235 Unaccepted 10分 FreePascal Xeost[5] 查看

77143 lizhixin 235 Unaccepted 20分 FreePascal Xeost[5] 查看

加了无数个条件:

program rq_235;

var s,fracc,CAO:string;

ch:array[0..10]of longint;

p,i,k,t,q:longint;

function sdfg(u:integer):string;

begin

case u of

1:sdfg:=’’;

2:sdfg:=’thousand ’;

3:sdfg:=’million ’;

4:sdfg:=’billion ’;

end;

end;

function cas(a:char):longint;

begin

case a of

’Q’:CAS:=1000;

’B’:CAS:=100;

’S’:CAS:=10;

’$’:CAS:=1;

END;

end;

function oul(st:string):longint;

var w:longint;

begin

st:=st+’$’;

oul:=0;

for w:=1 to length(st) do

begin

if st[w]=’S’ then

begin

if (w=1) or (st[w-1]=’0’) then inc(oul,10);

end;

if (st[w] in [’Q’,’B’,’S’,’$’]) and (w>1) and not ((st[w-1] in [’Q’,’B’,’S’,’$’])) then

inc(oul,cas(st[w])*(ord(st[w-1])-ord(’0’)));

end;

end;

begin

readln(s);

p:=pos(’D’,S);

q:=p;

if p<>0 then

begin

fracc:=copy(s,p+1,length(s)-p);

delete(s,p,length(s)-p+1);

end;

P:=pos(’Y’,s);

if p<>0 then

begin

t:=oul(copy(s,1,p-1));

delete(s,1,p);

ch[4]:=t div 10;

t:=t mod 10;

ch[3]:=t*100;

end;

p:=pos(’W’,s);

if p<>0 then

begin

t:=oul(copy(s,1,p-1));

delete(s,1,p);

inc(ch[3],t div 100);

ch[2]:=(t mod 100)*10;

end;

if length(s)>0 then

begin

t:=oul(s);

inc(ch[2],t div 1000);

ch[1]:=t mod 1000;

end;

k:=5;

while ch[k]=0 do dec(k);

if s=’0’ then s:=’zero ’ else s:=’’;

for i:=k downto 1 do

begin

if (ch[i]=1) and (i<>1) then

begin

s:=s+’a ’+sdfg(i);

continue;

end;

if ch[i] div 100>0 then

begin

case ch[i] div 100 of

1:s:=s+’a hundred ’;

2:s:=s+’two hundred ’;

3:s:=s+’three hundred ’;

4:s:=s+’four hundred ’;

5:s:=s+’five hundred ’;

6:s:=s+’six hundred ’;

7:s:=s+’seven hundred ’;

8:s:=s+’eight hundred ’;

9:s:=s+’nine hundred ’;

end;

end;

if (ch[i] div 100>0) and (ch[i] mod 100>0) then s:=s+’and ’;

if (ch[i]>0) and (ch[i]<100) and (length(s)>0) then s:=s+’and ’;

if ch[i] mod 100>0 then

begin

CAO:=’nine’;

case ch[i] mod 100 of

1:s:=s+’one ’;

2:s:=s+’two ’;

3:s:=s+’three ’;

4:s:=s+’four ’;

5:s:=s+’five ’;

6:s:=s+’six ’;

7:s:=s+’seven ’;

8:s:=s+’eight ’;

9:s:=s+’nine ’;

10:s:=s+’ten ’;

11:s:=s+’eleven ’;

12:s:=s+’twelve ’;

13:s:=s+’thirteen ’;

14:s:=s+’fourteen ’;

15:s:=s+’fifteen ’;

16:s:=s+’sixteen ’;

17:s:=s+’seventeen ’;

18:s:=s+’eighteen ’;

19:s:=s+CAO+’teen ’;

20:s:=s+’twenty ’;

21:s:=s+’twenty-one ’;

22:s:=s+’twenty-two ’;

23:s:=s+’twenty-three ’;

24:s:=s+’twenty-four ’;

25:s:=s+’twenty-five ’;

26:s:=s+’twenty-six ’;

27:s:=s+’twenty-seven ’;

28:s:=s+’twenty-eight ’;

29:s:=s+’twenty-nine ’;

30:s:=s+’thirty ’;

31:s:=s+’thirty-one ’;

32:s:=s+’thirty-two ’;

33:s:=s+’thirty-three ’;

34:s:=s+’thirty-four ’;

35:s:=s+’thirty-five ’;

36:s:=s+’thirty-six ’;

37:s:=s+’thirty-seven ’;

38:s:=s+’thirty-eight ’;

39:s:=s+’thirty-nine ’;

40:s:=s+’forty ’;

41:s:=s+’forty-one ’;

42:s:=s+’forty-two ’;

43:s:=s+’forty-three ’;

44:s:=s+’forty-four ’;

45:s:=s+’forty-five ’;

46:s:=s+’forty-six ’;

47:s:=s+’forty-seven ’;

48:s:=s+’forty-eight ’;

49:s:=s+’forty-nine ’;

50:s:=s+’fifty ’;

51:s:=s+’fifty-one ’;

52:s:=s+’fifty-two ’;

53:s:=s+’fifty-three ’;

54:s:=s+’fifty-four ’;

55:s:=s+’fifty-five ’;

56:s:=s+’fifty-six ’;

57:s:=s+’fifty-seven ’;

58:s:=s+’fifty-eight ’;

59:s:=s+’fifty-nine ’;

60:s:=s+’sixty ’;

61:s:=s+’sixty-one ’;

62:s:=s+’sixty-two ’;

63:s:=s+’sixty-three ’;

64:s:=s+’sixty-four ’;

65:s:=s+’sixty-five ’;

66:s:=s+’sixty-six ’;

67:s:=s+’sixty-seven ’;

68:s:=s+’sixty-eight ’;

69:s:=s+’sixty-nine ’;

70:s:=s+’seventy ’;

71:s:=s+’seventy-one ’;

72:s:=s+’seventy-two ’;

73:s:=s+’seventy-three ’;

74:s:=s+’seventy-four ’;

75:s:=s+’seventy-five ’;

76:s:=s+’seventy-six ’;

77:s:=s+’seventy-seven ’;

78:s:=s+’seventy-eight ’;

79:s:=s+’seventy-nine ’;

80:s:=s+’eighty ’;

81:s:=s+’eighty-one ’;

82:s:=s+’eighty-two ’;

83:s:=s+’eighty-three ’;

84:s:=s+’eighty-four ’;

85:s:=s+’eighty-five ’;

86:s:=s+’eighty-six ’;

87:s:=s+’eighty-seven ’;

88:s:=s+’eighty-eight ’;

89:s:=s+’eighty-nine ’;

90:s:=s+CAO+’ty ’;

91:s:=s+CAO+’ty-one ’;

92:s:=s+CAO+’ty-two ’;

93:s:=s+CAO+’ty-three ’;

94:s:=s+CAO+’ty-four ’;

95:s:=s+CAO+’ty-five ’;

96:s:=s+CAO+’ty-six ’;

97:s:=s+CAO+’ty-seven ’;

98:s:=s+CAO+’ty-eight ’;

99:s:=s+CAO+’ty-nine ’;

end;

end;

if ch[i]>0 then s:=s+sdfg(i);

end;

if q<>0 then

begin

s:=s+’point ’;

for i:=1 to length(fracc) do

case fracc[i] of

’0’:s:=s+’zero ’;

’1’:s:=s+’one ’;

’2’:s:=s+’two ’;

’3’:s:=s+’three ’;

’4’:s:=s+’four ’;

’5’:s:=s+’five ’;

’6’:s:=s+’six ’;

’7’:s:=s+’seven ’;

’8’:s:=s+’eight ’;

’9’:s:=s+’nine ’;

end;

end;

write(s);

end.

这题跟有空格没关系,我那个点有个eithty-没看出来,不过第8点我还是不理解.

#9 hh@2008-08-21 06:46:00
回复 删除
a hundred and eighty-one million eight hundred and (a thousand) eight hundred and eighteen point one eight one eight

test data 8

正确结果应为:a hundred billion two hundred million three hundred and (one thousand )four hundred and ten

明显两个不对啊

#10 前尘一梦@2010-10-04 00:07:00
回复 删除
顶lz

数据严重有问题

查看更多回复
提交回复