Trang 1 / 2 12 LastLast
Hiển thị kết quả từ 1 đến 10 / 11

Chủ đề: đảo chữ cái

  1. #1
    Tham gia
    09-04-2011
    Bài viết
    25
    Like
    0
    Thanked 11 Times in 8 Posts

    đảo chữ cái

    Viết chương trình đưa tra tất cả các từ có thể có phát sinh từ một tập các chữ cái.
    Ví dụ: cho từ 'abc'=> ta phải đưa ra các từ 'abc','acb','bac','bca','cab' và 'cba' (bằng cách khảo sát tất cả các trường hợp khác nhau của tổ hợp 3 chữ cái đã cho)
    Input
    Dữ liệu vào được cho trong tệp input.txt chưa một số từ. Dòng đầu tiên là một số tự nhiên cho biết số tự được cho ở dưới. Mỗi dòng tiếp theo chưa một từ. Trong đó, một từ có thể chứa cả các chữ cái thường hoặc hoa. Các chữ thường và hoa được coi như khác nhau. Một chữ cái nào đó có thể xuất hiện nhiều hơn một lần.
    Output
    Với mỗi từ đã cho trong file input.txt, ghi kết quả nhận được ra file outpout.txt phải chứa tất cả các từ khác nhau được sinh từ các chữ cái của từ đó. Các từ được sinh ra từ một từ đã cho phải được đưa ra theo thứ tự tăng dần của bảng chữ cái.
    Sample
    input.txt:
    2 abc
    acba
    Sample
    output.txt
    abc
    acb
    bac
    bca
    cab
    cba
    aabc
    aacb
    abac
    abca
    acab
    acba
    baac
    baca
    bcaa
    caab
    caba
    cbaa

    Ở chương trình này, mình bị mắc ở chỗ: 'Mỗi chữ cái có thể xuất hiện nhiều hơn một lần'=> chỉ đúng cho trường hợp 1. Ai có phương pháp giúp chương trình cho kết quả đúng với cả 2 trường hợp.
    Quote Quote

  2. 2 thành viên Like bài viết này:


  3. #2
    Tham gia
    05-05-2004
    Bài viết
    216
    Like
    2
    Thanked 8 Times in 8 Posts
    Up chờ cách giải hay và đơn giản

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


  5. #3
    Tham gia
    25-06-2011
    Location
    Ninh Bình
    Bài viết
    165
    Like
    4
    Thanked 57 Times in 52 Posts
    Thì bạn cứ sinh bình thường đi! Trong lúc in kết quả thì cần lưu ý để loại các hoán vị trùng nhau là OK thôi!

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


  7. #4
    Tham gia
    09-04-2011
    Bài viết
    25
    Like
    0
    Thanked 11 Times in 8 Posts
    Cảm ơn, mình đã nghĩ ra rồi!!!

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


  9. #5
    Tham gia
    29-06-2011
    Bài viết
    24
    Like
    1
    Thanked 12 Times in 12 Posts
    Bài này nên dùng phương pháp sinh

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


  11. #6
    Tham gia
    09-04-2011
    Bài viết
    25
    Like
    0
    Thanked 11 Times in 8 Posts
    Cảm ơn mọi người, mình đã hoàn thành xong bài này rồi!!!

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


  13. #7
    Tham gia
    05-06-2009
    Location
    Tuyên Quang
    Bài viết
    656
    Like
    0
    Thanked 4 Times in 3 Posts
    Quay lui cho đơn giản, đếm số lần xuất hiện thôi

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


  15. #8
    Tham gia
    05-05-2004
    Bài viết
    216
    Like
    2
    Thanked 8 Times in 8 Posts
    hic, có cách giải hay thì post nên đi các bạn

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


  17. #9
    Tham gia
    21-12-2010
    Bài viết
    477
    Like
    4
    Thanked 26 Times in 21 Posts
    uhm đấy, có lời giải up cho mọi người thêm kiến thức.

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


  19. #10
    Tham gia
    09-04-2011
    Bài viết
    25
    Like
    0
    Thanked 11 Times in 8 Posts
    Quote Được gửi bởi takang View Post
    uhm đấy, có lời giải up cho mọi người thêm kiến thức.
    Code:
     
    program dao_day;
    uses crt;
    const
         inp='inp2.txt';
         out='out2.txt';
    type
        str=array[0..100] of char;
    var
       s: str;
       f, g: text;
       n: longint;
       time: longint;
    procedure nhap;
    begin
         assign(f,inp);
         assign(g,out);
         reset(f);
         rewrite(g);
         readln(f,n);
    end;
    procedure doc(var s: str);
    var
       i: integer;
    begin
         fillchar(s,sizeof(s),chr(0));
         while not eoln(f) do
               begin
                    s[0]:=chr(ord(s[0])+1);
                    read(f,s[ord(s[0])]);
               end;
    end;
    procedure vietday(s: str);
    var
       i: word;
    begin
         for i:=1 to ord(s[0]) do write(s[i]);
    end;
    procedure quicksort(l, r: word);
    var
       i, j: word;
       tg, tam: char;
    begin
         i:=l;
         j:=r;
         tg:=s[(l+r) div 2];
         repeat
               while ord(s[i])<ord(tg) do inc(i);
               while ord(s[j])>ord(tg) do dec(j);
               if i<=j then
                  begin
                       tam:=s[i];
                       s[i]:=s[j];
                       s[j]:=tam;
                       inc(i);
                       dec(j);
                  end;
         until i>j;
         if j>l then quicksort(l,j);
         if i<r then quicksort(i,r);
    end;
    procedure sinh_hv(s: str);
    var
       vti, vtj, i, j: word;
       stop: boolean;
       tam: char;
    begin
         writeln(g);
         vietday(s);
         repeat
               stop:=true;
               for i:=ord(s[0]) downto 2 do
                   if s[i]>s[i-1] then
                      begin
                           vti:=i-1;
                           stop:=false;
                           for j:=ord(s[0]) downto vti+1 do
                               begin
                                    if (ord(s[j])>ord(s[vti])) then
                                       begin
                                            vtj:=j;
                                            break;
                                       end;
                               end;
                           tam:=s[vtj];
                           s[vtj]:=s[vti];
                           s[vti]:=tam;
                           for j:=1 to ((ord(s[0])-(vti+1))+1) div 2 do
                               begin
                                    tam:=s[vti+j];
                                    s[vti+j]:=s[ord(s[0])-j+1];
                                    s[ord(s[0])-j+1]:=tam;
                               end;
                           writeln;
                           vietday(s);
                           break;
                      end;
         until stop;
    end;
    procedure xuly;
    var
       i: longint;
    begin
         for i:=1 to n do
             begin
                  doc(s);
                  readln(f);
                  quicksort(1,ord(s[0]));
                  sinh_hv(s);
                  writeln(g);
             end;
         close(f);
         close(g);
    end;
    begin
         clrscr;
                nhap;
                xuly;
         readln;
    end.
    Được sửa bởi lequanghung98 lúc 22:41 ngày 06-08-2011

  20. 3 thành viên Like bài viết này:


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
  •