Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 11 kết quả

Đề tài: Giúp về bài tập đếm số phần tử trùng nhau của 2 mảng số nguyên

  1. #1
    Ngày gia nhập
    03 2012
    Bài viết
    0

    Mặc định Giúp về bài tập đếm số phần tử trùng nhau của 2 mảng số nguyên

    Mình làm như sau:
    Code:
    int demphantutrungnhau(int *a, int n, int *b, int m)
    {
    	int dem=0;
    	for(int i=0;i<n;i++)
    	{
    				for (int j=0;j<m;j++)
    				{
    					if (a[i]==b[j]) dem++;
                    		
    				}
    	}
    	return dem;
    }
    Mình đã test và code chỉ chạy đúng với mảng có các phần tử không trùng nhau.
    Còn vd như nhập vào 2 mảng như sau:
    mảng A: 1,1,1
    mảng B: 1,1,1
    Thì kết quả trả về là 9
    Nhờ các pro giúp mình sửa lại đoạn code trên với. Thanks các pro đã đọc bài của mình

  2. #2
    Ngày gia nhập
    02 2012
    Nơi ở
    Xanhpetecbua-Nga
    Bài viết
    34

    viết vậy thì nó ra 9 là phải thôi
    C++ Code:
    1. int demphantutrungnhau(int *a, int n, int *b, int m)
    2. {
    3.     int dem=0;
    4.     for(int i=0;i<n;i++)
    5.     {
    6.                 for (int j=0;j<m;j++)
    7.                
    8.                     if (a[i]==b[j]) {dem++;
    9.                                         break;//thêm vào //cái đề không rõ ràng chút nào cả
    10.                 }
    11.     }
    12.     return dem;
    13. }

  3. #3
    Ngày gia nhập
    03 2012
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi buithetai Xem bài viết
    viết vậy thì nó ra 9 là phải thôi
    C++ Code:
    1. int demphantutrungnhau(int *a, int n, int *b, int m)
    2. {
    3.     int dem=0;
    4.     for(int i=0;i<n;i++)
    5.     {
    6.                 for (int j=0;j<m;j++)
    7.                
    8.                     if (a[i]==b[j]) {dem++;
    9.                                         break;//thêm vào //cái đề không rõ ràng chút nào cả
    10.                 }
    11.     }
    12.     return dem;
    13. }
    Hjz mình đã test với bộ số như sau:
    dãy A: 1,0,2
    dãy B: 2,5,1
    kết quả trả về 3
    Mà mình vẫn chưa hiểu cái break bạn thêm vào để làm gì. Giải thích giúp mình được ko?

  4. #4
    Ngày gia nhập
    03 2011
    Bài viết
    44

    Mặc định Chào bạn,

    Đoạn code mà bạn buithetai gởi cho bạn có thể được hiểu như sau:
    - Duyệt từng phần tử của mảng a
    - Quét hết các phần tử của mảng b, nếu gặp phần tử nào của mảng b mà bằng với phần tử cần duyệt ở mảng a thì tăng biến dem lên 1, sau đó break.
    - Còn cái chỗ break kia là được hiểu là nếu gặp một phần tử ở mảng b mà bằng phần tử cần duyệt ở mảng a thì "bỏ" vòng lặp đó, không cần tìm tiếp.
    Nếu có gì không rõ, bạn có thể reply trong topic này để mọi người cùng trao đổi và thảo luận
    Chúc may mắn.

  5. #5
    Ngày gia nhập
    03 2012
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi phuchaontu Xem bài viết
    Đoạn code mà bạn buithetai gởi cho bạn có thể được hiểu như sau:
    - Duyệt từng phần tử của mảng a
    - Quét hết các phần tử của mảng b, nếu gặp phần tử nào của mảng b mà bằng với phần tử cần duyệt ở mảng a thì tăng biến dem lên 1, sau đó break.
    - Còn cái chỗ break kia là được hiểu là nếu gặp một phần tử ở mảng b mà bằng phần tử cần duyệt ở mảng a thì "bỏ" vòng lặp đó, không cần tìm tiếp.
    Nếu có gì không rõ, bạn có thể reply trong topic này để mọi người cùng trao đổi và thảo luận
    Chúc may mắn.
    cám ơn bạn nha mình đã hiểu phần break kia rồi. Nhưng mà code chưa chạy đúng bạn ơi, sửa giúp mình với, mình không biết sai ở đâu nữa

  6. #6
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Mặc định Giúp về bài tập đếm số phần tử trùng nhau của 2 mảng số nguyên

    Code trên vói dữ liệu trên cho ra kq là 2 đúng rồi. Không biết bạn tét ở đâu mả ra 3.

    Tuy nhiên nếu dùng dữ liệu
    { 1, 2, 3, 4, 2, 3, 5 }
    { 2, 3, 6, 7 }
    thì kq sẽ là 4
    Nếu muốn là 2 thì bắt buộc phải sắp xếp mảng a.

  7. #7
    Ngày gia nhập
    03 2011
    Bài viết
    44

    Mặc định Chào bạn,

    Không biết yêu cầu của chủ topic thế nào?
    Nếu theo như "Có"TichSu nói thì sẽ có 2 trường hợp.
    Ví dụ:
    a []{1,2,3,4,2,3,5}
    b []{2,3,6,7}
    - Nếu yêu cầu ra là 4 thì mình có đoạn code sau:
    C++ Code:
    1. #include "iostream"
    2. #include "algorithm"
    3. #include "conio.h"
    4. using namespace std;
    5.  
    6.  
    7. void Nhap(int *a,int n)
    8. {
    9.      cout<<"Nhap mang: "<<endl;
    10.      for(int i=0;i<n;i++){ cout<<"a["<<i<<"]: "; cin>>a[i]; }
    11. }
    12. int main()
    13. {
    14.     int n,m;
    15.     int *a, *b;
    16.     cout<<"Nhap so phan tu mang 1: "; cin>>m;
    17.     cout<<"Nhap so phan tu mang 2: "; cin>>n;
    18.    
    19.     a = new int[m];  b = new int[n];
    20.     Nhap(a,m); Nhap(b,n);
    21.    
    22.     sort(a,a+m);
    23.    
    24.     int dem = 0;    
    25.     int _i = 0, i;
    26.  
    27.    
    28.    
    29.  
    30.     for(i=0;i<m;i++)
    31.     {
    32.         for(int j=0;j<n;j++)
    33.         if(a[i] == b[j]){ dem++; break;}
    34.     }
    35.     cout<<dem<<endl;
    36.    
    37.     system("pause");
    38.     return 0;
    39. }
    - Nếu kết quả ra 2 thì mình cũng có đoạn code sau:
    C++ Code:
    1. #include "iostream"
    2. #include "algorithm"
    3. #include "conio.h"
    4. using namespace std;
    5.  
    6.  
    7. void Nhap(int *a,int n)
    8. {
    9.      cout<<"Nhap mang: "<<endl;
    10.      for(int i=0;i<n;i++){ cout<<"a["<<i<<"]: "; cin>>a[i]; }
    11. }
    12. int main()
    13. {
    14.     int n,m;
    15.     int *a, *b;
    16.     cout<<"Nhap so phan tu mang 1: "; cin>>m;
    17.     cout<<"Nhap so phan tu mang 2: "; cin>>n;
    18.    
    19.     a = new int[m];  b = new int[n];
    20.     Nhap(a,m); Nhap(b,n);
    21.    
    22.     sort(a,a+m);
    23.    
    24.     int dem = 0;    
    25.     int _i = 0, i;
    26.  
    27.    
    28.    
    29.     for(i=_i;i<m;i++)
    30.     {    
    31.         for(int j=0;j<n;j++)
    32.         if(a[i] == b[j]){ dem++; break;}
    33.        
    34.         while(i<m-1 && a[i] == a[i+1])i++;                
    35.         _i = i;
    36.        
    37.    
    38.     }
    39.  
    40.     cout<<dem<<endl;
    41.     system("pause");
    42.     return 0;
    43. }
    Mình gởi bạn đoạn code này, nếu có gì không rõ hoặc là cho là viết chưa đúng thì bạn có thể ý kiến để cùng trao đổi, học tập.
    Chúc may mắn.

  8. #8
    Ngày gia nhập
    03 2012
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi phuchaontu Xem bài viết
    Không biết yêu cầu của chủ topic thế nào?
    Nếu theo như "Có"TichSu nói thì sẽ có 2 trường hợp.
    Ví dụ:
    a []{1,2,3,4,2,3,5}
    b []{2,3,6,7}
    - Nếu yêu cầu ra là 4 thì mình có đoạn code sau:
    C++ Code:
    1. #include "iostream"
    2. #include "algorithm"
    3. #include "conio.h"
    4. using namespace std;
    5.  
    6.  
    7. void Nhap(int *a,int n)
    8. {
    9.      cout<<"Nhap mang: "<<endl;
    10.      for(int i=0;i<n;i++){ cout<<"a["<<i<<"]: "; cin>>a[i]; }
    11. }
    12. int main()
    13. {
    14.     int n,m;
    15.     int *a, *b;
    16.     cout<<"Nhap so phan tu mang 1: "; cin>>m;
    17.     cout<<"Nhap so phan tu mang 2: "; cin>>n;
    18.    
    19.     a = new int[m];  b = new int[n];
    20.     Nhap(a,m); Nhap(b,n);
    21.    
    22.     sort(a,a+m);
    23.    
    24.     int dem = 0;    
    25.     int _i = 0, i;
    26.  
    27.    
    28.    
    29.  
    30.     for(i=0;i<m;i++)
    31.     {
    32.         for(int j=0;j<n;j++)
    33.         if(a[i] == b[j]){ dem++; break;}
    34.     }
    35.     cout<<dem<<endl;
    36.    
    37.     system("pause");
    38.     return 0;
    39. }
    - Nếu kết quả ra 2 thì mình cũng có đoạn code sau:
    C++ Code:
    1. #include "iostream"
    2. #include "algorithm"
    3. #include "conio.h"
    4. using namespace std;
    5.  
    6.  
    7. void Nhap(int *a,int n)
    8. {
    9.      cout<<"Nhap mang: "<<endl;
    10.      for(int i=0;i<n;i++){ cout<<"a["<<i<<"]: "; cin>>a[i]; }
    11. }
    12. int main()
    13. {
    14.     int n,m;
    15.     int *a, *b;
    16.     cout<<"Nhap so phan tu mang 1: "; cin>>m;
    17.     cout<<"Nhap so phan tu mang 2: "; cin>>n;
    18.    
    19.     a = new int[m];  b = new int[n];
    20.     Nhap(a,m); Nhap(b,n);
    21.    
    22.     sort(a,a+m);
    23.    
    24.     int dem = 0;    
    25.     int _i = 0, i;
    26.  
    27.    
    28.    
    29.     for(i=_i;i<m;i++)
    30.     {    
    31.         for(int j=0;j<n;j++)
    32.         if(a[i] == b[j]){ dem++; break;}
    33.        
    34.         while(i<m-1 && a[i] == a[i+1])i++;                
    35.         _i = i;
    36.        
    37.    
    38.     }
    39.  
    40.     cout<<dem<<endl;
    41.     system("pause");
    42.     return 0;
    43. }
    Mình gởi bạn đoạn code này, nếu có gì không rõ hoặc là cho là viết chưa đúng thì bạn có thể ý kiến để cùng trao đổi, học tập.
    Chúc may mắn.
    Với bộ số trên thì yêu cầu xuất ra kết quả 2 là đúng ý mình đó bạn. Mình đã test code của bạn rồi chạy ok nhwng mình chưa hiểu chổ này:


    Code:
     sort(a,a+m); // 1.Hàm này có tác dụng gì?
        
        int dem = 0;    
        int _i = 0, i; //2. khai báo này mình chưa hiểu? Bạn giải thích giúp mình nha
    rất mong giúp đỡ của bạn!

  9. #9
    Ngày gia nhập
    03 2012
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi VoTichSu Xem bài viết
    Code trên vói dữ liệu trên cho ra kq là 2 đúng rồi. Không biết bạn tét ở đâu mả ra 3.

    Tuy nhiên nếu dùng dữ liệu
    { 1, 2, 3, 4, 2, 3, 5 }
    { 2, 3, 6, 7 }
    thì kq sẽ là 4
    Nếu muốn là 2 thì bắt buộc phải sắp xếp mảng a.
    code trên mình test ra 3 mà bạn, test lại lần nữa vẫn là 3. Bạn coi lại giúp mình

  10. #10
    Ngày gia nhập
    03 2012
    Bài viết
    0

    mấy bạn giúp mình với

Các đề tài tương tự

  1. Mảng trên C Bài toán xóa phần tử trùng nhau
    Gửi bởi hjepsjga_94 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 07-07-2013, 04:06 PM
  2. Bài tập C xóa phần tử trùng nhau trong mảng 1 chiều để lại 1 phần tử
    Gửi bởi ronoa trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 06-01-2012, 10:46 PM
  3. Thủ tục loại bỏ các phần tử trùng nhau, giữ lại duy nhất 1 phần tử trong DSLK
    Gửi bởi mrtyoffline trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 02-03-2011, 10:27 PM
  4. sắp xếp các phần tử tăng dần sau khi loại các phần tử trùng nhau
    Gửi bởi chieftain_vn trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 13-03-2009, 06:47 AM
  5. [ Solved ]Giúp đỡ tôi cách loại các phần tử mảng trùng nhau
    Gửi bởi md_vn trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 9
    Bài viết cuối: 25-08-2008, 09:45 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