Hiển thị kết quả từ 1 đến 10 / 10
  1. #1
    Tham gia
    19-03-2009
    Bài viết
    12
    Like
    1
    Thanked 0 Times in 0 Posts

    Các bạn tư vấn giúp mình_ bài chuỗi

    mình có 1 bài nè!!
    Cho một chuỗi gồm các ký tự là mẫu tự, chữ số và duy nhất một khảng trắng. Người ta biến đổi chuỗi bằng cách đưa một ký tự về khoảng trắng, tại vị trí ký tự bị lấy đi thành khoảng trắng. Hãy viết chương trình chỉ ra từng bước biến đổi theo cách nêu trên mà chuỗi s có các chữ số ở đầu chuỗi, rồi đến các mẫu tự, ở cuối chuỗi là khoảng trắng bảo đảm thứ tự ban đầu giữa các chữ số và bảo đảm ban đầu giữa các mẫu tự.
    Ví dụ S='a12b c5' khảng trắng duy nhất ở vị trí 5
    + Đổi b vị trí 4 về vị trí 5 của khoảng trắng S='a12 bc5'
    + Đổi a vị trí 1 về vị trí 4 của khoảng trắng S=' 12abc5'
    + Đổi 1 vị trí 2 về vị trí 1 của khoảng trắng S ='1 2abc5'
    + Đổi 2 vị trí 2 về vị trí 3 của khoảng trắng S='12 abc5'
    + Đổi 5 vị trí 7 về vị trí 3 của khoảng rắng: S='125abc'
    Reply With Quote
    Quote Quote

  2. #2
    Tham gia
    25-09-2006
    Bài viết
    533
    Like
    0
    Thanked 1 Time in 1 Post
    Code:
    làm ăn gian đc ko nhỉ:
    s="":w=""
    for i=1..len(s)
      begin
       if A(i)là kitự chữ thì
        s= s & A(i)
       if s(i) là kt số thì
        w=w & A(i)
      end;
    write(s,w);

  3. #3
    Tham gia
    19-03-2009
    Bài viết
    12
    Like
    1
    Thanked 0 Times in 0 Posts
    không được bạn ạ, mình phải chỉ rõ cách hoán đổi nữa mà

  4. #4
    Tham gia
    25-11-2007
    Location
    TP.HCM
    Bài viết
    100
    Like
    0
    Thanked 4 Times in 3 Posts
    của bạn đây
    Code:
    uses crt;
    var s:string;
        i,j:byte;
    
    function find(i:byte):byte;
    begin
    while i<=length(s) do
      begin
        if ord(s[i])>57 then
          begin
            find:=i;  exit;
          end;
        i:=i+1;
      end;
    find:=0;
    end;
    
    procedure swap(i,j:byte);
    var t:char;
    begin
    t:=s[i];  s[i]:=s[j];  s[j]:=t;
    writeln(i,'<-->',j);
    end;
    
    begin
    clrscr;  write('Nhap chuoi : ');  readln(s);
    i:=1;
    while i<length(s) do
      begin
        j:=find(i);
        if (ord(s[i])<=57) and (ord(s[i])>=48) and (j<>0) then
          begin
            swap(i,pos(' ',s));  swap(i,j);
          end;
        if s[i]=' ' then
          begin
            if j<>0 then swap(i,j) else swap(i,i+1);
          end;
        i:=i+1;
      end;
    readln;
    end.

  5. #5
    Tham gia
    19-03-2009
    Bài viết
    12
    Like
    1
    Thanked 0 Times in 0 Posts

    cam on

    Cám ơn bạn. Bạn có thể cho mình ý tưởng bài nén và giải nén chuỗi được ko ạ?

  6. #6
    Tham gia
    25-11-2007
    Location
    TP.HCM
    Bài viết
    100
    Like
    0
    Thanked 4 Times in 3 Posts
    ý tưởng của mình như sau :
    Duyệt từ đầu đến cuối chuỗi. Xét kí tự ở vị trí i:
    + nếu là kí tự số và phía sau nó còn kí tự chữ thì đổi chỗ 2 kí tự này
    + nếu là 1 dấu cách thì:
    1.nếu phía sau còn ký tự chữ thì đổi nó với kí tự chữ đó
    2.ngược lại thì đổi nó với ký tự liền phía sau nó

  7. #7
    Tham gia
    08-07-2009
    Bài viết
    49
    Like
    4
    Thanked 0 Times in 0 Posts

    ?????

    Làm như bạn QuyNam thì đâu có đảm bảo thứ tự

  8. #8
    Tham gia
    25-11-2007
    Location
    TP.HCM
    Bài viết
    100
    Like
    0
    Thanked 4 Times in 3 Posts
    sorry, mình đọc không kỹ đề

  9. #9
    Tham gia
    19-03-2009
    Bài viết
    12
    Like
    1
    Thanked 0 Times in 0 Posts
    Ý mình là bài nén và giải nén chuỗi
    VD: S: AABBBBADDD
    - Nén: AA4BA3D
    - Giải nén: S

  10. #10
    Tham gia
    08-07-2009
    Bài viết
    49
    Like
    4
    Thanked 0 Times in 0 Posts
    Mình cứ đếm, chỗ nào có n kí tự giồng nhau liên tiếp (n>2) thì xóa đi n-1 kí tự đó và chèn vào số n. Chúc bạn thành công!

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •