Trang 1 / 2 12 LastLast
Hiển thị kết quả từ 1 đến 10 / 14
  1. #1
    Tham gia
    22-01-2015
    Bài viết
    5
    Like
    1
    Thanked 0 Times in 0 Posts

    Nhờ Các pro giúp đỡ bài pascal này với

    Cho xâu ví dụ "cbpcbbc" thì có thể có được các chuỗi con như sau 'cb','pcb','cbbc'.........., còn 'cbc' hoặc 'cpc' thì không được gọi là chuỗi con.Hãy đếm xem chuỗi nhập vào có bao nhiêu chuỗi con như vậy
    vi dụ : chuỗi 'baothanhthien' kết quả có 85 chuỗi con.

    Mong các pro giúp với,em đang cần lắm
    Quote Quote

  2. #2
    Tham gia
    17-11-2007
    Bài viết
    91
    Like
    2
    Thanked 7 Times in 7 Posts
    Theo đề bài thì 1 chuỗi con phải đủ 2 điền kiện: >=2 ký tự và là 1 chuỗi hình thành bởi các ký tự liên tiếp từ trái qua phải.
    Để lấy ra hoặc đếm số chuỗi con bạn cần 2 vòng lặp:
    - Vòng lặp lớn chạy từ ký từ đầu tiên cho đến ký tự cuối cùng của chuỗi gốc.
    - Mỗi lượt chạy của vòng lặp lớn sẽ có vòng lặp nhỏ cũng chạy từ trái qua phải để ghép các ký tự thành chuỗi thỏa điều kiện, tạo biến đếm để cộng dồn mỗi lần ghép được.
    Sau khi thoát khỏi vòng lặp thì biến đếm sẽ trả về kết quả.

  3. #3
    Tham gia
    13-01-2010
    Bài viết
    27
    Like
    2
    Thanked 5 Times in 5 Posts
    Bạn xem lại đi, theo mình hiểu thì các xâu con sinh ra phải liên tục

  4. #4
    Tham gia
    13-01-2010
    Bài viết
    27
    Like
    2
    Thanked 5 Times in 5 Posts
    B1: bạn tạo ra các xâu con >= 2 ký tự lưu vào mảng a.
    dùng 2 vòng for i=1,leng; j=1,leng. inc(d); a[d]=copy(s,i,j)
    B2: săp xếp mang a
    B3: kiêm tra nếu A[i] <>a[i+1] thì inc(dem).
    B4: In dem.

  5. Thành viên Like bài viết này:


  6. #5
    Tham gia
    22-01-2015
    Bài viết
    5
    Like
    1
    Thanked 0 Times in 0 Posts
    Xin cảm ơn các bạn đã quan tâm
    Đây là đoạn code theo ý tưởng chienphuninh nhưng vẫn không ra kết quả như mong muôn, mình test xâu " baothanhthien" nhưng kết quả không ra 85 mà là 48. không biết mình sai như thế nào?
    uses crt;
    var
    st:string;
    a:array[1..200]of string;
    tmp:string ;
    i,j,dem,t:integer;
    begin
    clrscr;
    t:=0;
    write('nhap chuoi');readln(st);
    for i:=1 to length(st)do
    for j:=i+1 to length(st) do
    begin
    inc(t);
    a[t]:=copy(st,i,j);
    end;

    dem:=0 ;

    for i:=1 to length(st)-1 do
    for j:=i+1 to length(st) do
    begin
    if( a[i] >a[j] ) then
    begin
    tmp:=a[i];
    a[i]:=a[j];
    a[j]:=tmp;
    end;
    end;

    for i:=1 to t do
    if (a[i]<>a[i+1])then inc(dem);

    write('sl=',dem);
    readln;
    end.

  7. #6
    Tham gia
    13-01-2010
    Bài viết
    27
    Like
    2
    Thanked 5 Times in 5 Posts
    Phần sx của bạn sai rồi.
    i=1, t
    j=i+1,t

  8. #7
    Tham gia
    13-01-2010
    Bài viết
    27
    Like
    2
    Thanked 5 Times in 5 Posts
    Mình test đúng mà. bạn sửa lại 2 cáo vong for của bạn theo ý tưởng thuật toán của mình là được. ok

  9. #8
    Tham gia
    22-01-2015
    Bài viết
    5
    Like
    1
    Thanked 0 Times in 0 Posts
    MÌnh đã sửa lại code ở vòng lặp sx nhưng kết quả vẫn ko ra đúng được.
    bạn chienphuninh có thể post code mà bạn làm ra kết quả lên giúp mình được không?

  10. #9
    Tham gia
    17-11-2007
    Bài viết
    91
    Like
    2
    Thanked 7 Times in 7 Posts
    Xem lại để bài của chủ top đưa ra thì mình vẫn thấy như cách mình đã đề cập. Với chuỗi 'baothanhthien' thì:

    1. ba
    bao
    baot
    .....
    baothanhthien
    2. ao
    aot
    aoth
    .......
    aothanhthien
    ......
    ......
    en

    Có phải vậy không?

  11. #10
    Tham gia
    13-01-2010
    Bài viết
    27
    Like
    2
    Thanked 5 Times in 5 Posts
    Theo đề bài mình hiểu thì: chỉ đếm các xâu con khác nhau thôi. nếu trùng nhau thì chỉ đếm là 1 bạn crazyit ạ,

Trang 1 / 2 12 LastLast

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
  •