Gửi Thông Điệp Yêu Thương vanbinh_bt nhắn với all: thi sao rồi mấy đồ...[Mr]-Boom nhắn với All K4: Chúc mọi người có 1 kỳ thi thật tốt !!lặng lẽ yêu nhắn với nguyễn ngọc huy: chúc mi có một kỳ thi tốt nha. vẫn nhớ mingocthongcctm05f nhắn với QNGAI: hãy sát cánh bên nhau.....hi.......trinhvh91 nhắn với TM03B: TM03B đoàn kết đi chơi cuối khóa nghenNgười vô cảm nhắn với nguyenlu: Ai vậy? T vẫn bước đi trong yêu thương mà ^^381 nhắn với neyugn: mong rằng chúng ta sẽ đi đến cái đích cuối cùng !nguyenlu nhắn với Người vô cảm: Hãy bước đi trong sự yêu thươnglenguyen_alone nhắn với Young Bin: tại sao nhok lại iu bin chứ nhỉ???hp thành công nhá!!binhcaolinh nhắn với Đen Trần: Cố gắng học chăm chỉ nhé em! Gửi Thông Điệp Yêu Thương


BẢNG GIÁ QUẢNG CÁO TẠI DIỄN ĐÀN 2MIT.ORG 2012

Hiện kết quả từ 1 tới 4 của 4

Chủ đề: Thuật toán tìm dãy con chung dài nhất..

  1. #1
    Tham gia ngày
    Oct 2009
    Đến từ
    LT03C
    Tuổi
    21
    Bài gửi
    342
    Cảm ơn
    243
    Được cảm ơn 268/110 bài viết
    3
    Professional
     
     
    Số lần cộng|trừ: 0 lần

    Post Thuật toán tìm dãy con chung dài nhất..

    Sau đây là thuật toán tìm dãy con chung dài nhất. Nhưng nó vẫn còn sai nghĩa là tìm không hết các phần tử của dãy con chung dài nhất ( chưa xuất được dãy con chung dài nhất). Bạn nào kiểm tra dùm coi.

    Vidu: nhập vào 2 dãy:
    dãy a: 1,5,9,6,7,10,15,19
    dãy b: 2,5,6,7,16,19,20,21

    thì thuật toán của mình chỉ xuất được 6,7. Đúng phải là 5,6,7,19 mới đúng.
    Code:
    #include <iostream> 
    using namespace std; 
    
    void Nhap(int a[], int n) 
    { 
        for (int i = 0; i<n; i++) 
            cin>>a[i]; 
    } 
    
    void xuat(int a[], int n) 
    { 
        for (int i = 0; i<n; i++) 
            cout<<a[i]<<" "; 
    } 
    
    void Tim(int a[], int n, int x, int c[], int &t)
    {
        t = 0;
        for (int i = 0; i<n; i++)
            if (a[i] == x)
            {
                c[t] = i;
                t++;
            }
    }
    int DayConChung(int a[], int n, int b[], int m, int &max)
    {
        int k, j, l, spt, vt, t;
        int c[100];
        max = 0;
        for (int i = 0; i < n; i++)
        {
            Tim(b,m,a[i],c,t);
            for (l = 0; l < t; l++)
            {
                k = c[l];
                spt = 0;
                j = i;
                while ((j<n) && (k<m))
                {
                    if (b[k] == a[j])
                    {
                        spt++;
                        j++;
                        k++;
                    }
                    else
                        break;
                }
                if (spt>max)
                {
                    vt = i;
                    max = spt;
                }
            }
        }
        return vt;
    }  
    void main() 
    { 
        
        int a[100], b[100]; 
        int n,m, max; 
        cout<<"Nhap so phan tu cho day A: ";cin>>n;
        cout<<"Nhap gia tri cho day A"<<endl;
        Nhap(a,n); 
        cout<<"Nhap so phan tu cho day B: ";cin>>m;
        cout<<"Nhap gia tri cho day B"<<endl;
        Nhap(b,m); 
        xuat(a,n);cout<<endl;
        xuat(b,n);cout<<endl;
        int vt; 
        vt = DayConChung(a,n,b,m,max); 
        if (max == 0) 
            cout<<"Khong co day con chung"; 
        else 
        { 
            cout<<"Day con chung dai nhat la: "; 
            for (int i = 0; i<max; i++) 
                cout<<a[vt+i]<<" "; 
        } 
    }

    --------------------------------------------------
    Xem các chủ đề cùng chuyên mục:


    +1 EXP

  2. Có tổng cộng 2 thành viên cảm ơn haihung_9x cho bài viết này

    KunMinzi  (17-04-2011), withyou  (17-04-2011)

  3. #2
    Tham gia ngày
    Mar 2011
    Bài gửi
    181
    Cảm ơn
    16
    Được cảm ơn 14/13 bài viết
    4
    Beginner
     
     
    Số lần cộng|trừ: 0 lần

    Default

    void tim(int *M, int n, int m){
    for(int i=0; i<n;i++)
    for(int j=0;j<m;j++)
    {
    if(M[i]==M[j])
    cout<<M[i];
    }
    }

    chừng đó là nó in kqua ok rồi


  4. #3
    Tham gia ngày
    Sep 2009
    Đến từ
    LT03C
    Tuổi
    21
    Bài gửi
    1,221
    Cảm ơn
    863
    Được cảm ơn 905/417 bài viết
    Blog Entries
    4
    9
    MASTER
     
     
    Số lần cộng|trừ: 1 lần

    Default

    Trích Nguyên văn bởi trsa Xem bài viết
    void tim(int *M, int n, int m){
    for(int i=0; i<n;i++)
    for(int j=0;j<m;j++)
    {
    if(M[i]==M[j])
    cout<<M[i];
    }
    }

    chừng đó là nó in kqua ok rồi
    Mình không bik là cách này đúng không, nhưng theo mình học trên lớp thì hình như không phải

    VD: cho 2 day
    a=(3,5,1,3,5,5,3)
    b=(1,5,3,5,3,1)
    Thì sẽ in ra kết quả là:
    (5,3,5,3)or (1,3,5,3)or (1,5,5,3)

    Thay đổi nội dung bởi: lyvinhr00m, 17-04-2011 lúc 01:21 PM
    ---------------------------------------
    Code:
    #include:vinhroom.2mit@2mit.org
    #include:xiliton_keomut_1002
    #include:CCQ.LT03C
    #include:http://2mit.org

  5. #4
    Tham gia ngày
    Mar 2011
    Bài gửi
    181
    Cảm ơn
    16
    Được cảm ơn 14/13 bài viết
    4
    Beginner
     
     
    Số lần cộng|trừ: 0 lần

    Default

    kết quả theo chuong trình trên là nguyên dãy a. nếu muốn lấy phần tử ko trùng thì chỉ cần thêm lệnh sau
    Code:
    int giao(int*&M1,int &n1,int*&M2,int&n2)
    {    int *M3, d,i,j;
    	for( i=1;i<=n1;i++)
    	   for( j=1;j<=n2;j++)
                 {
    	      if(M1[i]==M2[j])
    	        for(d=0;d<=i+j;d++)
    	            M3[d]=M1[i];
                        break;     
                  }
          return M3[d];
    }
    void boptutrung(int*&M,int &n)
    {     int dem,i,j;
              for(i=0;i<n;i++)
                 {   dem=i;
                      for(j=i+1;j<n;j++)
                        {
                           if(M3[i]==M3[j])
                               break;
                           else
                              dem=dem+1; 
                          }
                       if(dem==n-1) cout<<M1[i];
                   }
    }
    
    hàm main gọi 2 hàm trên.
    với chương trình này thì kết quả là (3,5,1).
    Mình chưa chạy, bạn chạy thử đi, có lỗi gì thì nói hì

    Thay đổi nội dung bởi: trsa, 17-04-2011 lúc 03:43 PM

  6. Thành viên đã cảm ơn trsa trong bài viết này là :

    lyvinhr00m (17-04-2011)

Thông tin về chủ đề này

Users Browsing this Thread

Hiện giờ đang có 1 người xem chủ đề này. (0 thành viên 1 khách)

     

Chủ đề giống nhau

  1. Thuật toán tìm dãy con lớn nhất
    By haihung_9x in forum Thuật toán
    Trả lời: 0
    Bài mới gửi: 15-04-2011, 11:38 PM
  2. Trả lời: 0
    Bài mới gửi: 30-11-2010, 12:21 AM
  3. Việt Nam có cơ hội tham gia chung kết ACM/ICPC toàn cầu
    By Sory_i've_hurt_u in forum Tin tức công nghệ
    Trả lời: 0
    Bài mới gửi: 29-11-2010, 04:07 PM
  4. Chung kết Bóng Đá sinh viên toàn trường
    By bikute_hack in forum Thông báo từ Đoàn trường
    Trả lời: 0
    Bài mới gửi: 16-11-2009, 09:36 AM
  5. thủ thuật dùng Kaspskey chung với Bkav Pro
    By congthangitvn in forum Thủ thuật Internet-Yahoo
    Trả lời: 4
    Bài mới gửi: 26-05-2009, 05:43 PM

1488
Lượt xem

Share