Lập trình đơn giản

Bạn chưa đăng nhập. Vui lòng đăng nhập để hỏi bài
Hakita Nguyen

Cho một xâu S='123456789'.

Yêu cầu: Tìm cách chèn vào S các dấu '+' hoặc '-' để thu được số M cho trước (nếu có thể).

Dữ liệu: Đọc từ tệp BIEUTHUC.INP gồm một dòng duy nhất ghi số nguyên dương M.

Kết quả: Ghi ra tệp BIEUTHUC.OUT:

- Dòng thứ nhất ghi K là số cách biểu diễn tìm được (ghi '0' nếu không thể thu được M từ cách làm trên).

- Nếu K>0 thì K dòng tiếp theo mỗi dòng ghi một biểu diễn nhận được.

Ví dụ:

BIEUTHUC.INP BIEUTHUC.OUT
185

5

123-4+56-7+8+9

123+4-5-6+78-9

1-2+34+56+7+89

1+234-56+7+8-9

-1+234-56+7-8+9

Nguyễn Minh Lệ
17 tháng 2 2020 lúc 21:16

Bạn tham khảo code này nhé.

Uses crt;
Const fo = 'chenxau.out';
dau: array[1..3] of String[1]= ('','-','+');
s:array[1..9] of char=('1','2','3','4','5','6','7','8','9');
Var d:array[1..9] of String[1];
m:longInt;
f:text;
k:integer;
found:boolean;
Procedure Init;
Begin
Write('Cho M=');
Readln(m);
found:=false;
end;
Function tinh(s:string):longint;
Var i,t:longint;
code:integer;
Begin
i:=length(s);
While not(s[i] in ['-','+']) and (i>0) do dec(i);
val(copy(s,i+1,length(s)-i),t,code);
If i=0 then begin tinh:=t; exit; end
else
begin
delete(s,i,length(s)-i+1);
If s[i]='+' then tinh:=t+tinh(s);
If s[i]='-' then tinh:=tinh(s)-t;
end;
End;
Procedure Test(i:integer);
Var st:string; j:integer;
Begin
st:='';
For j:=1 to i do st:=st+d[j]+s[j];
If Tinh(st) = m then begin writeln(f,st); found:=true; end;
End;
Procedure Try(i:integer);
Var j:integer;
Begin
for j:=1 to 3 do
begin
d[i]:=dau[j]; Test(i);
If i<9 then try(i+1);
end;
End;
BEGIN
Clrscr;
Init;
Assign(f,fo);Rewrite(f);
for k:=1 to 2 do
begin
d[1]:=dau[k];
Try(2);
end;
If not found then write(f,'khong co ngiem');
Close(f);
END.

Khách vãng lai đã xóa

Các câu hỏi tương tự
Đào Tiến Đạt
Xem chi tiết
Hakita Nguyen
Xem chi tiết
Hakita Nguyen
Xem chi tiết
Hakita Nguyen
Xem chi tiết
No_pvp
Xem chi tiết
Nguyễn Chơn Nhân
Xem chi tiết
Mon_LAK
Xem chi tiết
Hakita Nguyen
Xem chi tiết
Nguyễn Phương Bằng
Xem chi tiết