主题:求 算24程序 ++30
tujunqiang
[专家分:150] 发布于 2005-11-11 10:52:00
问题描述]
给出4个1到1000之间的整数,用这4个整数,通过+、–、*的运算而得到24,运算规则如下:
1. 每个数必须使用一次,只能使用一次
2. 运算符无优先级之分,自左向右计算。
例如:输入4个数为2,9,3,1,
则计算方法为3+9*2*1=24
[输 入]: 4个1到1000之间的整数
[输 出]: 若4个数不能产生出24,则输出error;
若能产生,则输出产生式(若有多个,仅能输出一个)。
例如:输入:1,1,2,2 输入:4,4,4,4
输出:error 输出:4*4+4+4=24
回复列表 (共9个回复)
沙发
jtchang [专家分:5370] 发布于 2005-11-11 11:26:00
汗~~~~~“运算符无优先级之分,自左向右计算”
这样的问题我是不会算的。玩扑克都玩不赢。
http://www.programfan.com/club/showbbs.asp?id=65282
《用JavaScript算24点问题》
板凳
mythjoker [专家分:400] 发布于 2005-11-11 17:22:00
有测试数据吗?贴出来看看!
3 楼
泡泡糖 [专家分:230] 发布于 2005-11-11 19:33:00
我编了一个,不过比较麻烦,最近正在改进中.
program lt;
var a,b,c,d:integer;
a1,b1,c1,d1:integer;
q1,q2,q3,q4:integer;
w:array[1..4] of integer;
j1,j2,j3,kj:integer;s:real;
function he(k:integer;h1:real;h2:integer):real;
begin
case k of
1:he:=h1+h2;
2:he:=h1-h2;
3:he:=h1*h2;
4:he:=h1/h2;
end;
end;
procedure xunze(y1:integer;var k9:string);
begin
case y1 of
1:k9:='+';
2:k9:='-';
3:k9:='*';
4:k9:='/';
end;
end;
procedure dayin(z1,z2,z3:integer);
var s10:string;
begin
write('(((',a,' ');xunze(z1,s10);write(s10,' ');
write(b,') ');xunze(z2,s10);write(s10,' ');
write(c,') ');xunze(z3,s10);write(s10,' ',d,') = ',24);
end;
begin
writeln;
repeat
write('a,b,c,d:=');readln(a1,b1,c1,d1);
until (a1<20)and(b1<20)and(c1<20)and(d1<20);
w[1]:=a1;w[2]:=b1;w[3]:=c1;w[4]:=d1;
for q1:=1 to 4 do
for q2:=1 to 4 do
if q1<>q2 then
for q3:=1 to 4 do
if (q1<>q3)and(q2<>q3) then
for q4:=1 to 4 do
if (q1<>q4)and(q2<>q4)and(q3<>q4) then
begin
a:=w[q1];b:=w[q2];c:=w[q3];d:=w[q4];
for j1:=1 to 4 do
for j2:=1 to 4 do
for j3:=1 to 4 do
begin
s:=a;
s:=he(j1,s,b);
s:=he(j2,s,c);
s:=he(j3,s,d);
if s=24 then
begin
dayin(j1,j2,j3);kj:=9;
j1:=4;j2:=4;j3:=4;q1:=4;q2:=4;q3:=4;q4:=4;
end;
end;
end;
if kj=9 then writeln('NO');
end.
帮帮忙,++分,好吗?谢谢!
4 楼
jtchang [专家分:5370] 发布于 2005-11-11 22:33:00
3楼泡泡糖想编个实际意义上的算24点程序啊?测没测过数据哪?程序错了哦!知道不知道?呵呵! (1 5 5 5)、(3 3 8 8)等一系列组合,你的程序算不出来~ 有点可惜~
1 5 5 5 是以前朋友考我的题目。答案:
(5-1/5)*5 = 24
3 3 8 8 据说是微软公司在中国招工面试的题目。答案:
8/(3-8/3) = 24
所以你还要加油!呵呵~~~
5 楼
tujunqiang [专家分:150] 发布于 2005-11-12 22:05:00
有没有更简短的程序?
6 楼
chty [专家分:230] 发布于 2005-11-16 20:03:00
4楼的 你没读懂题意吗?
“2. 运算符无优先级之分,自左向右计算。”
怎么会出现
“(5-1/5)*5 = 24”
“8/(3-8/3) = 24”啊?!
7 楼
chty [专家分:230] 发布于 2005-11-16 20:05:00
program d24;
var f,a1,a2,a3,a4,b1,b2,b3,b4,i,j,k:integer;
x:real;
begin
readln(a1,a2,a3,a4);
for i:=1 to 4 do
for j:=1 to 4 do
for k:=1 to 4 do
begin
b1:=a1;b2:=a2;b3:=a3;b4:=a4;
case i of
1:x:=a1+a2;
2:x:=a1-a2;
3:x:=a1*a2;
4:x:=a1/a2;
end;
case j of
1:x:=x+a3;
2:x:=x-a3;
3:x:=x*a3;
4:x:=x/a3;
end;
case k of
1:x:=x+a4;
2:x:=x-a4;
3:x:=x*a4;
4:x:=x/a4;
end;
if x=24 then
begin
write(a1);
case i of
1:write('+');
2:write('-');
3:write('*');
4:write('/');
end;
write(a2);
case j of
1:write('+');
2:write('-');
3:write('*');
4:write('/');
end;
write(a3);
case k of
1:write('+');
2:write('-');
3:write('*');
4:write('/');
end;
writeln(a4,'=',24);
f:=1;
end;
end;
if f=0 then writeln('error');
end.
我的好象更长了!不过总算思考过了,加分啊!
8 楼
tujunqiang [专家分:150] 发布于 2005-11-16 23:16:00
楼上的测试2 9 3 1错误
9 楼
jtchang [专家分:5370] 发布于 2005-11-16 23:23:00
我晕~~~
To 6楼:
我说的是泡泡糖编的“实际意义上的算24点程序”啊~~~~根本不是说原题~~ 泡泡糖的程序也不是原题~~~~
原题你真的看懂了吗?
通过+、–、*的运算而得到24 (楼主原题就是这样)
既然这样,算除干什么?除根本不用算哪~ 呵呵~~~
我来回复