pascal算24!给出4个1到1000之间的整数,用这4个整数,通过+、–、*的运算而得到24,运算规则如下:1.每个

问题描述:

pascal算24!
给出4个1到1000之间的整数,用这4个整数,通过+、–、*的运算而得到24,运算规则如下:1.每个数必须使用一次,只能使用一次 2.运算符无优先级之分,自左向右计算.
例如:输入4个数为2 9 3 1
则计算方法为2+1*9-3=24
例如:输入:1 1 2 2 输入:4 4 4 4
输出:error 输出:4*4+4+4=24
输入
4个1到1000之间的整数
输出
若4个数不能产生出24,则输出error;若能产生,则输出产生式(若有多个,仅能输出一个).
样例输入
示例1:
5 7 4 9   
示例2:
9 13 7 2
示例3:
5 1 3 5         
示例4:
8 9 5 2
样例输出
示例1:
7-4*5+9=24
示例2:
9-7*13-2=24
示例3:
error
示例4:
8+9+5+2=24
procedure find(dep:longint); 
var i:longint; 
begin
  if dep>4
  then calcu 
  else for i:=1 to 4 do
         if f[i] 
         then begin k[dep]:=a[i]; f[i]:=false; find(dep+1); f[i]:=true; end; 
end; 
begin
  read(a[1],a[2],a[3],a[4]); 
  fillchar(f,sizeof(f),true); 
  find(1); 
  writeln('error'); 
end.
这是代码的后半部分,前半部分见下图
1个回答 分类:综合 2014-10-17

问题解答:

我来补答
const cha:array[1..3]of char=('+','-','*');
var a,c,d:array[1..4]of longint; b:array[1..4]of boolean;
procedure print;
var i:longint;
begin
write(c[1]);
for i:=1 to 3 do write(cha[d[i]],c[i+1]);
writeln('=24');
halt;
end;
procedure cal;
var i:longint; s:int64;
begin
s:=c[1];
for i:=1 to 3 do
case d[i] of
1:s:=s+c[i+1];
2:s:=s-c[i+1];
3:s:=s*c[i+1];
end;
if s=24 then print;
end;
procedure ch(dep:longint);
var i:longint;
begin
if dep>3
then cal
else for i:=1 to 3 do
begin
d[dep]:=i;
ch(dep+1);
end;
end;
procedure find(dep:longint);
var i:longint;
begin
if dep>4
then ch(1)
else for i:=1 to 4 do
if b[i]
then begin
b[i]:=false;
c[dep]:=a[i];
find(dep+1);
b[i]:=true;
end;
end;
begin
read(a[1],a[2],a[3],a[4]);
fillchar(b,sizeof(b),true);
find(1);
writeln('error');
end.
 
 
展开全文阅读
剩余:2000
也许感兴趣的知识