Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Hoán vị lặp

  1. #1
    Ngày gia nhập
    11 2008
    Nơi ở
    Pháo đài số
    Bài viết
    41

    Mặc định Hoán vị lặp

    mấy anh chĩ dùm thuật toán hoán vị lặp đi......như chữ MISSIPI ah,liệt kê tất cả các hoán vị của nó
    theo lý thuyết thì có 7!/( 1! . 1! . 2! . 3 !)=420 xâu gồm các chữ đó
    nhưng mà em làm theo kiểu này,là hoán vị 1 mãng gồm các số từ 1->7,và khi in ra thì mặc định cho nó theo xâu chữ kia
    vidu:
    M--->1
    I---->2
    S--->3
    S---->4
    I---->5
    P---->6
    I---->7
    và khi dùng hàm hoán vị các số đó như 3542716--->SISIIMP thì nó sẽ giống như 1 xâu nữa là 3547216---->SISIIMP
    em đã dùng hàm kiểm tra xem thữ để loại bõ nhưng chĩ giảm đc 1 phần thui

    kô tìm ra đc 1 đoạn code nào để kiểm tra cho loại bõ đc các xâu như thế
    mấy anh chỉ dùm em thuật toán hoán vị lặp cái...chứ theo kiểu như trên chắc sai tè le rùi...
    Đã được chỉnh sửa lần cuối bởi Chuột : 04-01-2009 lúc 12:17 AM.

  2. #2
    Ngày gia nhập
    11 2008
    Nơi ở
    Neverland
    Bài viết
    48

    Bài này dùng thuật toán sinh là được mà bạn mình Code demo một bài bằng C++ :
    C++ Code:
    1. #include <iostream>
    2. #include <string>
    3. #include <cstdlib>
    4. using namespace std;
    5.  
    6. void swap(char& x,char &y)
    7. {
    8.      char temp = x;
    9.      x = y;
    10.      y = temp;
    11. }
    12.  
    13. int main()
    14. {
    15.     string s = "MISSIPI";
    16.     int n = s.length();
    17.     int count = 0 , i , j, k;
    18.     for (i = 0;i < n - 1;i++)
    19.         for (j = i + 1;j < n;j++)
    20.             if (s[i] > s[j]) swap(s[i],s[j]);
    21.     do
    22.     {
    23.        count++;
    24.        cout << count << ": " << s << endl;
    25.        i = n - 2;
    26.        while (i >=0 && s[i] >= s[i+1]) i--;
    27.        if (i >= 0)
    28.        {
    29.           k = n - 1;
    30.           while (s[k] <= s[i]) k--;
    31.           swap(s[i],s[k]);
    32.           int a = i + 1;
    33.           int b = n - 1;
    34.           while (a < b)
    35.           {
    36.                 swap(s[a],s[b]);
    37.                 a++;
    38.                 b--;
    39.           }
    40.        }
    41.     }
    42.     while (i >= 0);
    43.     system("pause");
    44.     return 0;
    45. }
    I'm superman

  3. #3
    Ngày gia nhập
    05 2008
    Bài viết
    14

    eck hình như bài này hoán vị lặp không dùng hàm sinh dc thì phải.phải loại các trường hợp lặp nữa mừ
    giờ say mê bên ai em đổ lỗi anh vô tình

  4. #4
    Ngày gia nhập
    11 2008
    Nơi ở
    Pháo đài số
    Bài viết
    41

    ọc..cả ngày ni cúp điện...nên chừ mới zo đc 4rum...thì ra là thêm cái dấu = ah`....để thử đã...dù sao cũng cảm ơn.

  5. #5
    Ngày gia nhập
    11 2008
    Nơi ở
    Pháo đài số
    Bài viết
    41

    test thữ rùi...ông anh viết báo 10,lỗi...nhưng em đã khắc phục đc...chạy đúng y ah...cảm ơn ông anh nhiều..... ...chứ viết đệ qui thì chắc em điên lun quá....hi....chĩnh lại cho chỗ count là kiểu long thì hay hơn anh ah`...chứ xâu mà 9 ký tự là âm te le cã...hi
    Đã được chỉnh sửa lần cuối bởi Chuột : 04-01-2009 lúc 09:56 PM.

Quyền hạn của bạn

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