讨论 / 5 5 5 1怎么配成24点??
lizhixin 2013-01-29 01:11:00
点我顶贴 收藏 删除
给一分不是不有点少了??
#1 lizhixin@2008-07-09 01:19:00
回复 删除
(5-(1/5))*5

#2 lizhixin@2008-07-09 01:20:00
回复 删除
为啥不能悬赏自己???啊
#3 海的翅膀@2008-07-09 01:34:00
回复 删除
5*(5-1/5)
#4 Inzaghi@2008-07-09 01:50:00
回复 删除
十分轻松……

#5 lizhixin@2008-07-09 01:52:00
回复 删除
首先感谢回答问题的牛人..

program No_74;

const ty:array[1..24,1..4]of integer=

((1,2,3,4),

(1,2,4,3),

(1,3,2,4),

(1,3,4,2),

(1,4,2,3),

(1,4,3,2),

(2,1,3,4),

(2,1,4,3),

(2,3,1,4),

(2,3,4,1),

(2,4,1,3),

(2,4,3,1),

(3,1,2,4),

(3,1,4,2),

(3,2,1,4),

(3,2,4,1),

(3,4,1,2),

(3,4,2,1),

(4,1,2,3),

(4,1,3,2),

(4,2,1,3),

(4,2,3,1),

(4,3,1,2),

(4,3,2,1));

var x:char;

r,s:array[0..4]of longint;

a:array[0..4]of real;

i,j,k:integer;

begin

//assign(output,n74.txt);

//rewrite(output);

i:=0;

for k:=1 to 7 do

begin

read(x);

if x= then continue;

inc(i);

case x of

1:BEGIN READ(X);IF X=0 THEN S[I]:=10 ELSE S[I]:=1; END;

A:s[i]:=1;

J:s[i]:=11;

Q:s[i]:=12;

K:s[i]:=13;

else s[i]:=ord(x)-ord(0);

end;

end;

for k:=1 to 24 do

for r[1]:=1 to 4 do

for r[2]:=1 to 4 do

for r[3]:=1 to 4 do

begin

a[1]:=s[ty[k,1]];

a[2]:=s[ty[k,2]];

a[3]:=s[ty[k,3]];

a[4]:=s[ty[k,4]];

//writeln(a[1]:0:0, ,a[2]:0:0, ,a[3]:0:0, ,a[4]:0:0,-------,r[1],r[2],r[3]);

for j:=1 to 3 do

case r[j] of

1:a[j+1]:=a[j]+a[j+1];

2:a[j+1]:=a[j]-a[j+1];

3:a[j+1]:=a[j]*a[j+1];

4:a[j+1]:=a[j]/a[j+1];

end;

//writeln(a[4]:0:2);

if (ROUND(a[4])=24) and (round((a[4]+0.000001)*100) mod 100=0) then

begin

writeln(yes);

//readln;

//READLN;

exit;

end; {abcd}

a[1]:=s[ty[k,1]];

a[2]:=s[ty[k,2]];

a[3]:=s[ty[k,3]];

a[4]:=s[ty[k,4]];

case r[2] of

1:a[3]:=a[2]+a[3];

2:a[3]:=a[2]-a[3];

3:a[3]:=a[2]*a[3];

4:a[3]:=a[2]/a[3];

end;

case r[1] of

1:a[3]:=a[1]+a[3];

2:a[3]:=a[1]-a[3];

3:a[3]:=a[1]*a[3];

4:if a[3]=0 then a[3]:=-7474745 else a[3]:=a[1]/a[3];

end;

case r[3] of

1:a[4]:=a[3]+a[4];

2:a[4]:=a[3]-a[4];

3:a[4]:=a[3]*a[4];

4:a[4]:=a[3]/a[4];

end;

//writeln(a[4]:0:2);

if (ROUND(a[4])=24) and (round((a[4]+0.000001)*100) mod 100=0) then

begin

writeln(yes);

//readln;

//READLN;

exit;

end; {a(bc)d}

a[1]:=s[ty[k,1]];

a[2]:=s[ty[k,2]];

a[3]:=s[ty[k,3]];

a[4]:=s[ty[k,4]];

for j:=1 to 3 do

if j<>2 then

case r[j] of

1:a[j+1]:=a[j]+a[j+1];

2:a[j+1]:=a[j]-a[j+1];

3:a[j+1]:=a[j]*a[j+1];

4:if a[j+1]=0 then a[j+1]:=-7474745 else a[j+1]:=a[j]/a[j+1];

end;

case r[2] of

1:a[4]:=a[2]+a[4];

2:a[4]:=a[2]-a[4];

3:a[4]:=a[2]*a[4];

4:if a[4]=0 then a[4]:=-7474745 else a[4]:=a[2]/a[4];

end;

//writeln(a[4]:0:2);

if (ROUND(a[4])=24) and (round((a[4]+0.000001)*100) mod 100=0) then

begin

writeln(yes);

//readln;

//READLN;

exit;

end; {(ab)(cd)}

a[1]:=s[ty[k,1]];

a[2]:=s[ty[k,2]];

a[3]:=s[ty[k,3]];

a[4]:=s[ty[k,4]];

for j:=2 to 3 do

case r[j] of

1:a[j+1]:=a[j]+a[j+1];

2:a[j+1]:=a[j]-a[j+1];

3:a[j+1]:=a[j]*a[j+1];

4:if a[j+1]=0 then a[j+1]:=-7474745 else a[j+1]:=a[j]/a[j+1];

end;

case r[1] of

1:a[4]:=a[1]+a[4];

2:a[4]:=a[1]-a[4];

3:a[4]:=a[1]*a[4];

4:if a[4]=0 then a[4]:=-7474745 else a[4]:=a[1]/a[4];

end;

//writeln(a[4]:0:2);

if (ROUND(a[4])=24) and (round((a[4]+0.000001)*100) mod 100=0) then

begin

writeln(yes);

//readln;

//READLN;

exit;

end; {a(bcd)}

a[1]:=s[ty[k,1]];

a[2]:=s[ty[k,2]];

a[3]:=s[ty[k,3]];

a[4]:=s[ty[k,4]];

for j:=3 downto 2 do

case r[j] of

1:a[j]:=a[j]+a[j+1];

2:a[j]:=a[j]-a[j+1];

3:a[j]:=a[j]*a[j+1];

4:if a[j+1]=0 then a[j]:=-7474745 else a[j]:=a[j]/a[j+1];

end;

case r[1] of

1:a[2]:=a[1]+a[2];

2:a[2]:=a[1]-a[2];

3:a[2]:=a[1]*a[2];

4:if a[2]=0 then a[2]:=-7474745 else a[2]:=a[1]/a[2];

end;

//writeln(a[2]:0:2);

if (ROUND(a[2])=24) and (round((a[2]+0.000001)*100) mod 100=0) then

begin

writeln(yes);

//readln;

//READLN;

exit;

end; {a(b(cd))}

end;

writeln(no);

//close(output);

end.

我去把键盘修修...@$@#@$$

#6 shushi0113@2008-07-24 18:06:00
回复 删除
你的写法纯粹是直接写法,难道就没有正规点的吗?
#7 GCX@2013-01-29 01:11:00
回复 删除
有木有牛人告诉我哪里错了??

type arr=array[0..5] of real;

var

i,r,t,k:integer;

a:arr;

b:array[0..5] of char;

c:array[0..5,0..2] of real;

st:string;

function check(n:string):integer;

var i:integer;

begin

if ('2'<=n)and(n<='9')or(n='10') then begin val(n,check,i); exit; end;

if n='A' then exit(1);

if n='J' then exit(11);

if n='Q' then exit(12);

if n='K' then exit(13);

end;

procedure try(k:integer; a:arr);

var

i,j,l,s:integer;

t,x,y:real;

d:arr;

begin

if k=1 then if a[1]=24 then begin write('yes'); halt; end

else exit;

for i:=1 to k-1 do

for j:=i+1 to k do

begin

x:=a[i];

y:=a[j];

if x<y then begin t:=x; x:=y; y:=t; end;

c[5-k,0]:= x;

c[5-k,1]:= y;

s:=0;

for l:=1 to k do

if (l<>i)and(l<>j) then

begin inc(s); d[s]:=a[l]; end;

inc(s);

for l:=1 to 4 do

begin

case l of

1:begin inc(r); c[5-k,2]:=x+y; b[r]:='+'; end;

2:begin inc(r); b[r]:='-';c[5-k,2] :=x-y; end;

3:begin inc(r); c[5-k,2]:=x*y; b[r]:='*'; end;

4:begin if y<>0 then c[5-k,2]:=x/y; inc(r); b[r]:='/'; end;

end;

d[s]:=c[5-k,2];

try(s,d);

dec(r);

end;

end;

end;

begin

r:=0;

readln(st);

for i:=1 to 4 do a[i]:=check(copy(st,i*2-1,1));

try(4,a);

write('no');

end.

查看更多回复
提交回复