View Full Version : Mã hóa xâu
lehang_gb1
22-07-2009, 22:16
Viết chương trình nhập vào xâu và mã hoá:
VD:
Mahoa.Inp
Ha Noi
8610510111632789109
Mahoa.Out
72973278111105
Viet Nam
Sax. Phải biết là mã hóa như thế nào chứ. Đọc cái vd không hiểu.
nhat_truong
23-07-2009, 00:16
Có phải đây là mã hóa theo bộ mã ASCII?
Mà test sai kìa, HaNoi và VietNam phải có dấu cách ở giữa: Ha Noi, Viet Nam thì mới mã hóa thế kia được.
Mã hóa xuôi thì dễ thôi, nhưng ngược lại thì hơi khó, tui chưa nghĩ ra
quay lui
......................................
vẫn k hỉu đề , ai giảng dùm ik :(
vẫn k hỉu đề , ai giảng dùm ik :(
Em cũng chả hiểu. Về cái đoạn mã hóa này mình ngu.
bài này mã hóa theo ASCII
xâu ABCD mã hóa thành 65666768 , ... ngược lại thì buộc phải quay lui
Tưởng Ascii các chữ đều chỉ >=99 và <=10.
Cứ 2 số 1 ta giải ra.
hình như Q nhầm
"A" -> "Z" : 65 -> 90
"a" -> "z" : 97 -> 122
Thế à chị? Thanks. Em quên bảng ascii.
Thế thì phải xét 3 cái. Nếu không thấy ra chữ thì ta xét 2 cái trước.
Cứ như vậy
làm thử bằng tay với test của đề thử xem quang :) nghe mù mờ quá
DO DONG HIEN
24-07-2009, 09:24
phải nói rõ dùng thuật toán nào để mã hóa thì mới viết được ct chứ.Bó tay.
const fi='mahoa.inp';
fo='mahoa.out';
so:set of char=['0'..'9'];
chu:set of char=['a'..'b','A'..'Z',' '];
var f,g:text;
s:string;
j:byte;
function kt(s:string):boolean;
var i:byte;
begin
kt:=false;
for i:=1 to length(s) do
if not (s[i] in so) then exit;
kt:=true;
end;
function mahoachu(s:string):string;
var s1,s2:string;
i:byte;
begin
s1:='';
for i:=1 to length(s) do
begin
str(ord(s[i]),s2);
s1:=s1+s2;
end;
mahoachu:=s1;
end;
function tach(j,k:byte):char;
var s1:string;
mso,err:byte;
begin
s1:='';
repeat
dec(k);
s1:=s1+s[j];
inc(j);
until k=0;
val(s1,mso,err);
if err=0 then tach:=chr(mso);
end;
function mahoaso(s:string):string;
var s1:string;
begin
s1:='';
j:=0;
repeat
inc(j);
if (tach(j,2) in chu) then
begin
s1:=s1+tach(j,2);
inc(j);
end
else
begin
s1:=s1+tach(j,3);
inc(j,2);
end;
until j>length(s);
mahoaso:=s1;
end;
procedure inp;
begin
assign(f,fi);reset(f);
assign(g,fo);rewrite(g);
while not eof(f) do
begin
readln(f,s);
if not kt(s) then writeln(g,mahoachu(s))
else writeln(g,mahoaso(s));
end;
close(f);close(g);
end;
begin
inp;
end.
[=========> Bổ sung bài viết <=========]
cùng ý tưởng vs Q :)
Ahaha. Thanks pà chị. Có người cùng ý tưởng. Vui :D
Mình thấy có gì đâu nhỉ. Kể cả là số cũng đến 2 chữ số trong ascii thôi.
Xét 3 cái mà không ra chữ, số hay space thì xét 2 cái.
Mình ko thấy sai ở đâu cả
bạn cho ví dụ làm = tay đi ^^, nói vẫn chưa hiểu
Ví dụ
efgh ABCD1234
Thì mã hóa ra là
101102103104326566676849505152
Xét 3 cái đầu là 101 -> e
Cứ thế xét đến cái sau 104 là 326 -> Ko ra chữ, số hay space -> xét 32
Thấy ra space
Xét tiếp 656 -> ko ra -> 65 -> A
Cứ thế
ra vậy ^^, mình nghĩ là quay lui nhưng làm như vậy sẽ rất dở ;p
thế này 1111 có thể tách thành 4 số 1 , 2 số 11 hoặc 1 số 111 , 1 số 1
co nhiều cách tách nhỉ ^^
Mình gà nên luôn tìm cách đơn giản, không cao siêu.
Thứ tự ưu tiên của mình là: Ko có gì -> Đệ quy -> Đồ thị -> QHĐ
:D
Cái gì kém nhất để ở cuối.
Nhưng tất nhiên những bài thấy có khả năng QHĐ được thì làm luôn
về Đồ thị quang biết rất nhiều , đã đọc đến đồ thị hai phía , phần công rồi à ? nhanh quá ! mình sau khi thi xong THT là mình có thể bị cho give up môn programming luôn ;p, vì học toán mà ^^
Uhm. Hôm qua mấy cô giáo xuống động viên đi thi.
Bảo là năm lớp 9 phải học cật lực vì giải gì cũng đổ lên đầu mình.
Thiệt là mệt quá.
Bình thường thui. Mình chỉ hiểu nhất là BFS, DFS, loang, Tìm đường (trừ Tô-pô), Prim và Hungary.
topo cũng vậy thôi, làm theo kiểu ford bellman , nhưng đánh dấu lại thì số đỉnh phải xét đến ít hơn nhiều , vì chỉ có đỉnh nhỏ đi đến đỉnh lớn.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.