#include <iostream>
using namespace std;
class IntegerSet{
public:
IntegerSet(int);
~IntegerSet(){};
IntegerSet Union_of_Set(IntegerSet);
IntegerSet Intersection_of_Set(IntegerSet);
void InsertElement(int);
void DeleteElement(int);
bool isEqualTo(IntegerSet);
void printSet();
private:
bool set[100];
int size;
};
IntegerSet::IntegerSet(int count){
this->size =count;
for (int i=0;i<count;i++)
{
IntegerSet::set[i]=false;
}
}
//為什麼要用this,不能用size=count嗎?
//為什麼可以知道size=6
//為什麼 IntegerSet::set[i]=false; 這行要打integerSet::
//這個for迴圈是做什麼?
IntegerSet IntegerSet::Union_of_Set(IntegerSet set2){
IntegerSet union_of_set(100);
for (int i=0; i<size; i=i+1){
if (this->set[i]==true or set2.set[i] == true){
union_of_set.InsertElement(i);
}
}
return union_of_set;
}
//這裡的for迴圈表示什麼阿
IntegerSet IntegerSet::Intersection_of_Set(IntegerSet set2){
IntegerSet intersection_of_set(100);
for (int i=0; i<size; i=i+1){
if (this->set[i]==true and set2.set[i] == true){
intersection_of_set.InsertElement(i);
}
}
return intersection_of_set;
}
void IntegerSet::InsertElement(int index){
set[index] = true;
}
void IntegerSet::DeleteElement(int index){
set[index] = false;
}
bool IntegerSet::isEqualTo(IntegerSet set2){
for (int index=0; index<size; index++){
if (this->set[index] != set2.set[index] ){
return false;
}
}
return true;
}
void IntegerSet::printSet(){
for (int index=0; index<size; index++){
if (set[index] == true){
cout << index << '_';
}
}
}
int main()
{
int insert_1,insert_2,insert_3,insert_4,insert_5,insert_6;
IntegerSet testset1(100),testset2(100),testset3(100),testset4(100);
cin >> insert_1 >> insert_2 >>insert_3 >>insert_4 >> insert_5 >>insert_6;
testset1.InsertElement(insert_1);
testset1.InsertElement(insert_2);
testset1.InsertElement(insert_3);
testset1.InsertElement(insert_4);
testset1.InsertElement(insert_5);
testset1.InsertElement(insert_6);
testset1.printSet();
cout<< endl;
testset2.InsertElement(3);
testset2.InsertElement(5);
testset2.InsertElement(6);
testset2.InsertElement(8);
testset2.InsertElement(9);
testset2.InsertElement(44);
testset2.printSet();
cout<< endl;
testset3 = testset1.Union_of_Set(testset2);
testset3.printSet();
cout<< endl;
testset4 = testset1.Intersection_of_Set(testset2);
testset4.printSet();
cout<< endl;
if (testset1.isEqualTo(testset2)){
cout << 1 << endl;
}
else{
cout << 0 << endl;
}
return 0;
}
非常感謝!
題目是:取交集聯集
如果用人工智慧來解題,大概會寫這樣,再用肉眼判斷
而這裡的程式的做法是
先準備大小為100的陣列(型態為bool)
並且將全部設值為 false,如下M1
然後用 TRUE 來表示有該數字,以 1,2,3,4,5,6 為例如下M2
所以可以得到題目以下(為了好看,用 V 代表 True,空白代表 False)
最後是計算聯集和交集
聯集就是「從元素0到元素99,上下兩者只要有一個是V就設成 True」M3
交集就是「從元素0到元素99,上下兩者兩個都要是V才設成 True」M4
處理後得到結果如下
做完收工放飯
M1:IntegerSet::IntegerSet(int count),
M2:void IntegerSet::InsertElement(int index)
M3:IntegerSet IntegerSet::Union_of_Set(IntegerSet set2)
M4:IntegerSet IntegerSet::Intersection_of_Set(IntegerSet set2)
另外有幾個函式void IntegerSet::DeleteElement(int index):刪掉一個數字(eg.設為 False)
bool IntegerSet::isEqualTo(IntegerSet set2):比對兩個陣列是否相同
void IntegerSet::printSet():印出數字(eg.只印 True 的部份)