Chủ đề: các pác giúp em bài pascal với
-
04-04-2010, 04:05 AM #11
Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 4
ặc thuật toán thế tớ cũng đã nghĩ ra rùi nhưng viết ko dc mới nói[IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]
-
04-04-2010, 05:41 AM #12
Junior Member
- Ngày tham gia
- Nov 2015
- Bài viết
- 0
Thôi thì thế này vậy, bạn làm hộ mình bài toán của mình, mình sẽ làm hộ bài cho bạn, mình cũng đang đau đầu đây.
-
04-04-2010, 10:27 PM #13
Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 3
pó hand. up hộ các pro khác nào
-
04-05-2010, 03:11 AM #14
Senior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 1,183
Bài này có thể chia thành hai bài toán con.
Nếu đầu mỗi xâu là số 1 thì ghi ra dạng đầy đủ của nó . Nếu bắt đầu bằng số 2 thì ghi ra xâu ngược Của xâu nhập vào như dưới kia
Chuyển xâu S cần xử lí thành xâu mới với các dấu * và + và đóng mở ngoặc như một biểu thức toán học.
VD: A2B(C2A)2 sẽ được chuyển thành: A*2+B+(C*2+A)*2
Sau đó ta chuyển sang kiểu kí pháp hậu tố. Ví dụ như xâu đang xét sẽ thành A2*BC2*A+2*++
Rồi sau đó ta có thể tính một lượt từ trái sang phải mà không phải xét nhiều trường hợp lẻ tẻ nữa.
--- Cách này làm ra thì chương trình cũng dài, nhưng được cái thuật toán lại quen thuộc [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG] Nếu bạn không hiểu về kí pháp hậu tố (kí pháp Ba Lan) thì bạn có thể tìm đọc ebook của thầy Lê Minh Hoàng hoặc tìm đến với người bạn thân Google nhé [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG] Cách của bạn HSG theo mình thì còn chưa rõ ràng và chưa chặt chẽ, ở đoạn xử lí dấu ngoặc, mình nói thế nếu không phải thì mong bạn bỏ quá cho [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]
Còn về bài toán thứ hai thì mình vẫn chưa hiểu rõ yêu cầu của đề lắm. Bạn có thể cho mình output của bộ dữ liệu dưới đây không??? Để mình hiểu rõ đề yêu cầu xử lí với những phần tử trong ngoặc như thế nào để mình có thể đưa ra thuật toán chính xác [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]
Input: 2 A(C2(D(GF2)E2G)2A)2
Bạn trả lời sớm nhé!
-
04-05-2010, 05:17 AM #15
Junior Member
- Ngày tham gia
- Nov 2015
- Bài viết
- 0
bài toán thứ 2 thì khi bạn đã làm được bài toán thứ 1 rồi, đảo ngược xâu lại và lại nén lại theo quy tắc, có phải thế không nhỉ?
-
04-05-2010, 05:35 AM #16
Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 2
A(GE2((F2G)D)2C2)2
Đưa ra thế này bạn ah.
Thực sự là bài đầu rất rắc rối. Mình nghe có người nói phải dùng loang kiểu bài nuôi cá
Còn dùng ký pháp hậu tố đó mình lại chưa thông thạo . Bạn có thể code dc ko .
-
04-05-2010, 07:05 AM #17
Junior Member
- Ngày tham gia
- Nov 2015
- Bài viết
- 0
Kí pháp hậu tố, tiền tố, trung tố là kí pháp theo kiểu Ba Lan, những kí pháp này đều được giới thiệu rất rõ trong ebook của thày Lê Minh Hoàng, bạn tìm đọc sẽ hiểu ngay thôi, còn nói ở đây thì sẽ khá là dài dòng đấy.
-
04-05-2010, 09:36 PM #18
Junior Member
- Ngày tham gia
- Nov 2015
- Bài viết
- 0
Tiếc thật vẫn ko có ai giải cho , Mai thi rùi . @ trunga0 có yahoo cho mình xin cái
-
04-06-2010, 12:44 AM #19
Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 1
Mình nghĩ là bạn đọc ebook và tự code sẽ tốt hơn và nhớ hơn đấy. Với cả mình cũng lười code lắm, chỉ có nói thuật toán linh tinh là giỏi thôi :">
Câu hỏi loại 1 thực ra có cách làm thô sơ hơn đó là xử lí lần lượt từng cặp dấu ngoặc một. Tức là bạn sẽ duyệt xâu từ trái sang phải, thấy dấu mở ngoặc thì tìm dấu đóng ngoặc tương ứng với nó rồi xử lí (nhân lên bao nhiêu lần đó). Sau khi xử lí xong lại bắt đầu lại quá trình cho đến khi không còn dấu ngoặc nào nữa. Lúc này thì dễ rồi nhỉ [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]
Mình lấy ví dụ luôn cho bạn dễ hiểu nhé, nó là thế này:
Xâu ban đầu: A2B(C2(B2E)3A)2
Sau lần xử lí đầu tiên: A2B(C2(B2E)3A)2 -> A2BC2(B2E)3AC2(B2E)3A
Sau lần xử lí thứ hai: A2BC2(B2E)3AC2(B2E)3A -> A2BC2B2EB2EB2EAC2(B2E)3A
Sau lần xử lí thứ ba: A2BC2B2EB2EB2EAC2(B2E)3A -> A2BC2B2EB2EB2EAC2B2EB2EB2EA
Lần cuối cùng, khi đã không còn dấu ngoặc thì đơn giản rồi nhé!
Mà YM của mình là truelove_bluesky. Có gì bạn cứ add vào rồi mình trao đổi nhé!
-
04-06-2010, 05:18 AM #20
Silver member
- Ngày tham gia
- Apr 2016
- Bài viết
- 0
Code của mình đây, các bạn tìm thử xem còn bug nào không nhé [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG] Chương trình mình dài là vì mình xử lí cả những TH số có nhiều hơn 1 chữ số.
VD: 1 A11B(C12E)100 thì phải viết thế này mới chạy đúng đc [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]
Mà mình viết trên FreePascal nên chỉ chạy đc trên FreePascal thôi, TurboPascal chưa chắc đã chạy được đâu [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]
//type
// ansistring = string;
var
S : ansistring;
function number( p: longint): string;
var temp :string;
begin
temp:= '';
while (p <= length(s) ) and (S[p] in ['0'..'9']) do
begin
temp:=temp + S[p];
inc(p);
end;
exit(temp);
end;
function xau_nguoc(x: string) :string;
var i : longint;
ch : char;
begin
for i:=1 to (length(x) div 2) do
begin
ch:= x;
x:= x[length(x)+1-i];
x[length(x)+1-i] := ch;
end;
exit(x);
end;
procedure solve1;
var p,q,deg,t,z : longint;
temp,nb : string;
begin
delete(S, 1, 2);
while ( pos('(', S) > 0 ) do
begin
deg:=1; p:=pos('(', S); q:=p;
while deg > 0 do
begin
inc(q);
if S[q] = '(' then
inc(deg);
if S[q] = ')' then
dec(deg);
end;
temp:=copy(S, p+1, q-p-1);
//val(S[q+1], t, z);
nb:=number(q+1);
val(nb, t, z);
delete(S, p, q-p+1+length(nb));
for z:=1 to t do
insert(temp, S, p);
end;
//
temp:='';
for p:=1 to length(S)-1 do
begin
if S[p] in ['0'..'9'] then
continue;
q:=p+1;
if S[q] in ['0'..'9'] then
begin
nb:=number(q);
val(nb, t, z);
for z:=1 to t do
temp:=temp+S[p]
end
else
temp:=temp+S[p]
end;
if not (S[length(S)] in ['0'..'9']) then
temp:=temp+S[length(S)];
writeln(temp);
end;
function find_bracket : longint;
var p : longint;
begin
for p:= length(S) downto 1 do
if S[p] = ')' then
exit (p);
exit(0);
end;
procedure solve2;
var p,q,deg,t,z : longint;
temp,nb : string;
begin
delete(S, 1, 2);
repeat
q:= find_bracket;
if q=0 then
break;
//
deg := -1; p:=q;
while deg < 0 do
begin
dec(p);
if S[p] = '(' then
inc(deg);
if S[p] = ')' then
dec(deg);
end;
//
S[p]:= '[';
S[q]:= ']';
nb:=number(q+1);
nb:=xau_nguoc(nb);
delete(S, q+1, length(nb));
insert(' '+nb, S, p);
until false;
//
temp:='';
for p:=2 to length(S) do
begin
if (S[p] in ['0'..'9']) and (S[p-1]<> ' ') then
begin
nb:=number(p);
nb:=xau_nguoc(nb);
delete(S, p, length(nb));
insert(nb, S, p-1);
end;
end;
//
temp:= xau_nguoc(S);
S:='';
for z:=1 to length(temp) do
case temp[z] of
'[': S:= S+')';
']': S:= S+'(';
' ': continue;
else
S:= S+temp[z];
end;
writeln(S);
end;
BEGIN
write('S= ');
readln(S);
//
if S[1] = '1' then
solve1
else
solve2;
readln;
END.
Theo điều tra tình hình sử dụng thuốc lá ở người trưởng thành năm 2020 do Bộ Y tế triển khai, ngày nay tỷ lệ đàn ông Việt Nam hút thuốc đang ở mức 42,3%. Không chỉ có khả năng gây ung thư và một...
Những thói quen khiến "cuộc vui" của hai người trở nên... dở dang