回 帖 发 新 帖 刷新版面

主题:求  算24程序 ++30

问题描述]
给出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个回复)

沙发

汗~~~~~“运算符无优先级之分,自左向右计算”
这样的问题我是不会算的。玩扑克都玩不赢。

http://www.programfan.com/club/showbbs.asp?id=65282
《用JavaScript算24点问题》

板凳

有测试数据吗?贴出来看看!

3 楼

我编了一个,不过比较麻烦,最近正在改进中.

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 楼

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 楼

有没有更简短的程序?

6 楼

4楼的 你没读懂题意吗?
“2.    运算符无优先级之分,自左向右计算。”
怎么会出现
“(5-1/5)*5 = 24”
“8/(3-8/3) = 24”啊?!




7 楼

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 楼

楼上的测试2 9 3 1错误

9 楼

我晕~~~

To 6楼:
我说的是泡泡糖编的“实际意义上的算24点程序”啊~~~~根本不是说原题~~ 泡泡糖的程序也不是原题~~~~
原题你真的看懂了吗?
通过+、–、*的运算而得到24    (楼主原题就是这样)
既然这样,算除干什么?除根本不用算哪~ 呵呵~~~

我来回复

您尚未登录,请登录后再回复。点此登录或注册