Hợp và giao của 2 mảng

Em làm ra phần giao nhưng phần hợp chỉ có ý tưởng là sắp xếp lại 2 mảng rồi cộng phần giao với các số còn lại của 2 mảng nhưng k thể nào viết chương trình ra được. Anh chị giúp em với.em cám ơn ạ.

#include<iostream>
using namespace std;

int n,m,*a,*b,c[100];

int Init() {
		cin>>n>>m;
		a=new int[n+1];
		for(int i=1;i<=n;i++) {
			cin>>a[i];
		}
		b=new int[m+1];
		for(int i=1;i<=m;i++) {
			cin>>b[i];
		}
}

int interset() {
	 for(int i=1;i<=n;i++) {
			for(int j=1;j<=m;j++) {
				if(a[i]==b[j]) {
				   c[i]=a[i];
				   cout<<c[i]<<" ";
			    }
			}
		}
		
}
int main() {
	int T;
	cin>>T;
	while(T--) {
	    Init();
            interset();
         }
}
1 Like

HỢP là “cộng” 2 mảng, nhưng loại bỏ phần tử giống nhau. Ngộ thay, những phần tử bị loại bỏ đó lại chính là phần GIAO.

4 Likes

cuộc sống mà :frowning: .anh có cách gì cứu rỗi cuộc sống bế tắc này không ạ

Mình trả lời rồi đấy!

  • “Cộng” 2 mảng.
  • Loại bỏ phần tử giống nhau để được HỢP.
  • Những phần tử bị loại bỏ phía trên là GIAO.
3 Likes

Chuyển qua nhị phân để làm hợp hoặc giao. Ví dụ:

{ 1, 2, 3, 4, 5 } = 000111110
{ 1, 2, 8, 7 }    = 110000110

Giao dùng phép AND

000111110
110000110
---------
000000110 = { 1, 2 }

Hợp dùng phép OR

000111110
110000110
---------
110111110 = { 1, 2, 3, 4, 5, 7, 8 }

5 Likes

xài std::set_union cho hợp và std::set_intersection cho giao
:innocent:

5 Likes

e sử dụng c++ có làm được như anh nói không ạ

có bác nào biết viết hàm hiệu không ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?