Biểu thức Cho số tự nhiên N, hãy đặt các dấu +,- vào giữa các chữ số nào đó của 1,2,3,4,5,6,7,8,9 (viết theo thứ tự đã cho) để tạo thành 1 biểu thức có kết quả bằng N. Ví dụ: với N=122 thì 1 kết quả có thể là: 12+34-5-6+78+9=122. Nếu không tìm được thì thông báo 0. Exp.inp 122 Exp.out 12+34-5-6+78+9
Bài giải của Hikari Amura : uses crt; var x: array[1..100] of longint; n: longint; //--------------------------------------- Procedure Print; var i,b,s: longint; Begin s:=0; b:=1; For i:=1 to 8 do Begin If x[i]=1 then Begin s:=s+b; If b>0 then b:=b*10+1+i Else b:=b*10-(i+1); End; If x[i]=2 then //+ Begin s:=s+b; b:=b+i+1;//b:=i+1; End; If x[i]=3 then //- Begin s:=s+b; b:=b-(i+1);////b:=?; End; End; s:=s+b; If s=n then Begin write('1'); For i:=1 to 8 do// begin If x[i]=1 then write(i+1); If x[i]=2 then write('+',i+1); If x[i]=3 then write('-',i+1);//end;
End; End; //------------------------------------------- Procedure Try(i: longint); var j: integer; Begin For i:=1 to 3 do Begin x[i]:=j; If i=8 then Print else Try(i+1); End; End; //------------------------------------------ Begin write('n=?'); read(n); Try(1); End.
Biểu thức
Trả lờiXóaCho số tự nhiên N, hãy đặt các dấu +,- vào giữa các chữ số nào đó của 1,2,3,4,5,6,7,8,9 (viết theo thứ tự đã cho) để tạo thành 1 biểu thức có kết quả bằng N. Ví dụ: với N=122 thì 1 kết quả có thể là: 12+34-5-6+78+9=122. Nếu không tìm được thì thông báo 0.
Exp.inp
122
Exp.out
12+34-5-6+78+9
Bài giải của Hikari Amura :
uses crt;
var x: array[1..100] of longint;
n: longint;
//---------------------------------------
Procedure Print;
var i,b,s: longint;
Begin
s:=0; b:=1;
For i:=1 to 8 do
Begin
If x[i]=1 then
Begin
s:=s+b;
If b>0 then b:=b*10+1+i
Else b:=b*10-(i+1);
End;
If x[i]=2 then //+
Begin
s:=s+b;
b:=b+i+1;//b:=i+1;
End;
If x[i]=3 then //-
Begin
s:=s+b;
b:=b-(i+1);////b:=?;
End;
End;
s:=s+b;
If s=n then
Begin
write('1');
For i:=1 to 8 do// begin
If x[i]=1 then write(i+1);
If x[i]=2 then write('+',i+1);
If x[i]=3 then write('-',i+1);//end;
End;
End;
//-------------------------------------------
Procedure Try(i: longint);
var j: integer;
Begin
For i:=1 to 3 do
Begin
x[i]:=j;
If i=8 then Print else Try(i+1);
End;
End;
//------------------------------------------
Begin
write('n=?');
read(n);
Try(1);
End.