Từ đối xứng pascal
1. Đề bài Từ đối xứng Hai từ được gọi là đối xứng nếu từ này là từ đảo ngược của từ kia. Cho file BAI1.INP mỗi dòng chứa một xâu ký tự. Hãy in ra số từ phân biệt có từ đối xứng ở trong mỗi dòng. Kết quả in ra file BAI1.OUT, mỗi dòng ghi số từ phân biệt có từ đối xứng. Nếu không ...
1. Đề bài Từ đối xứng
Hai từ được gọi là đối xứng nếu từ này là từ đảo ngược của từ kia.
Cho file BAI1.INP mỗi dòng chứa một xâu ký tự. Hãy in ra số từ phân biệt có từ đối xứng ở trong mỗi dòng.
Kết quả in ra file BAI1.OUT, mỗi dòng ghi số từ phân biệt có từ đối xứng. Nếu không có ghi kết quả là số 0.
Lưu ý: Nếu có nhiều cặp từ đối xứng giống nhau chỉ tính 1.
Ví dụ:
INPUT
a
ab ab cd ba cd ba dc dc
tom la mot loai dong vat
abc abc cba cba
OUTPUT
0
2
1
1
Độ dài mỗi dòng chỉ trong kiểu string
2. Hướng dẫn làm bài từ đối xứng pascal
– Nhận xét một từ được phân biệt bằng dấu khoảng trắng, chính vì vậy ta sẽ tách các từ dựa trên dấu khoảng trắng.
– Bài này ta có nhiều cách làm, các bạn có thể tách các từ xong bỏ vào mảng để duyệt N^2, hoặc tách được từ nào xử lí từ đó ngay trên xâu sau đó xóa từ đó khỏi xâu.
3. Code tham khảo từ đối xứng pascal
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | Program tudoixung; var st:string; procedure chuanhoa(var st:string); var vt:longint; begin st:=' '+st+' '; vt:=pos(' ',st); while vt<>0 do begin delete(st,vt,1); vt:=pos(' ',st); end; delete(st,1,1); delete(st,length(st),1); end; Function tudao(st:string):string; var s:string; i:byte; begin s:='; for i:=length(st) downto 1 do s:=s+st[i]; tudao:=s; end; function demsotu(st:string):integer; var d,i:integer; begin d:=1; for i:=1 to length(st) do if st[i]=' ' then d:=d+1; demsotu:=d; end; function demtu(st:string):integer; var tu,tu1:string; i,dem:byte; vt:longint; begin dem:=0; tu:='; tu1:='; chuanhoa(st); while demsotu(st)>1 do begin i:=1; tu:='; while st[i]<>' ' do begin tu:=tu+st[i]; inc(i); end; tu1:=tudao(tu); if pos(tu1,st)<>0 then inc(dem); vt:=pos(tu1,st); while vt<>0 do begin delete(st,vt,length(tu1)); vt:=pos(tu1,st); end; vt:=pos(tu,st); while vt<>0 do begin delete(st,vt,length(tu1)); vt:=pos(tu,st); end; chuanhoa(st); end; demtu:=dem; end; Procedure out; var f,g:text; begin assign(f,'tudoixung.inp'); assign(g,'tudoixung.out'); reset(f); rewrite(g); while not seekeof(f) do begin readln(f,st); writeln(g,demtu(st)); end; close(f); close(g); end; BEGIN OUT; END. |