b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

c++实现集合的交并差集

电脑杂谈  发布时间:2019-08-21 03:05:25  来源:网络整理

c语言集合运算_集合的交并差c语言_集合运算 并 差 交

#include<iostream.h>

#include<string.h>

class set

{

public:

set(int *q=NULL, int length1=0);

friend set operator+(set &e, set &f);

friend set operator*(set &e, set &f);

friend set operator-(set &e, set &f);

void show();

private:

int *p, length;

};

void set::show()

{

for(int i = 0; i < length; i++)

cout<<p[i]<<' ';

cout<<"\n";

}

set::set(int *q, int length1)

{

p = q;

length = length1;

}

set operator+(set &e, set &f)//最多就是两个集合和的长度

{

int i, j, flag;

int *w = new int [e.length+f.length];//开辟一段空间

memset(w,0,(e.length+f.length)*sizeof(int));//w指针所有的空间里的值全部赋为0

memcpy(w,e.p,e.length*sizeof(int));

int num = 0;

for(i = 0; i < f.length; i++)//f中的数要和e中的每个数比较一下是否相同 所以e是内循环

{

flag = 1;

for(j = 0; j < e.length; j++)

{

if(f.p[i] == e.p[j]) //指针表示方法

{

flag = 0;

集合运算 并 差 交_集合的交并差c语言_c语言集合运算

break;

}

}

if(flag == 1)//也就是此时f.p[i]与e中每个数都不一样

{

*(w+e.length+num) = f.p[i];

num++;

}

}

int *r = new int [e.length+num];

memcpy(r集合的交并差c语言,w,(e.length+num)*sizeof(int));

delete w;

set temp(r,e.length+num);

return temp;

}

set operator*(set &e,set &f)//交集最多的长度就是数量少的集合长度

{

int i集合的交并差c语言, j;

int num = 0;

if(e.length>f.length)

{

int *w = new int [f.length];//开辟一段空间

memset(w,0,f.length*sizeof(int));//这一段空间赋为0

for(i = 0; i < f.length; i++)//数量少的集合去与数目多的集合比较 相等就把总量小的集合的值弄到w中

{

int flag = 0;

for(j = 0;j < e.length; j++)

{

if(f.p[i] == e.p[j])

{

flag = 1;

break;

}

}

if(flag == 1)

{

*(w+num) = f.p[i];

num++;

}

c语言集合运算_集合运算 并 差 交_集合的交并差c语言

}

int *r = new int[num];//实际上只用了num这么大的存储

memcpy(r,w,num*sizeof(int));

delete w;//之前的就没有用了

set temp(r,num);//重新构造

return temp;

}

else

{

int *w = new int [e.length];//开辟一段空间

memset(w,0,e.length*sizeof(int));//这一段空间赋为0

for(i = 0; i < e.length; i++)//数量少的集合去与数目多的集合比较 相等就把总量小的集合的值弄到w中

{

int flag = 0;

for(j = 0;j < f.length; j++)

{

if(e.p[i] == f.p[j])

{

flag = 1;

break;

}

}

if(flag == 1)

{

*(w+num) = e.p[i];

num++;

}

}

int *r = new int[num];//实际上只用了num这么大的存储

memcpy(r,w,num*sizeof(int));

delete w;//之前的就没有用了

set temp(r,num);//重新构造

return temp;

}

}

set operator-(set &e, set &f)//差集长度结果一定大于等于左操作数的宽度

{

int i, j;

int *w = new int [e.length];//开辟一个左操作数的长度

集合运算 并 差 交_集合的交并差c语言_c语言集合运算

memset(w,0,e.length*sizeof(int));//全部赋为0

int num = 0;

for(i = 0; i < e.length; i++)

{

int flag = 0;

for(j = 0; j < f.length; j++)

{

if(e.p[i] == f.p[j])

{

flag = 1;

break;

}

}

if(flag == 0)

{

*(w+num) = e.p[i];//f中没有与e相同的数 则这个数就是差集中的值

num++;

}

}

int *r = new int [num];

memcpy(r,w,num*sizeof(int));

delete w;

set temp(r,num);

return temp;

}

void ui()

{

cout<<"1:并集的计算"<<endl;

cout<<"2:差集的计算"<<endl;

cout<<"3:交集的计算"<<endl;

cout<<"4:结束程序"<<endl;

cout<<"输入相应的进入相应的计算"<<endl;

}

int main()

{

int a[100], b[100], la, lb, i, j, n;

cout<<"欢迎进入集合操作系统"<<endl;

cout<<"请键入第一个集合的个数及值"<<endl;

cin>>la;

c语言集合运算_集合运算 并 差 交_集合的交并差c语言

for(i = 0; i < la; i++)

{

cin>>a[i];

}

cout<<"请键入第二个集合的个数及值"<<endl;

cin>>lb;

for(j = 0; j < lb; j++)

{

cin>>b[j];

}

ui();

set s1(a, la);

set s2(b, lb);

while(cin>>n)

{

if(n == 1)

{

set s3 = s1 + s2;

cout<<"并集的结果"<<endl;

s3.show();

cout<<"\n";

}

else if(n == 2)

{

set s4 = s1-s2;

cout<<"差集的结果"<<endl;

s4.show();

cout<<"\n";

}

else if(n == 3)

{

set s5 = s1*s2;

cout<<"交集的结果"<<endl;

s5.show();

cout<<"\n";

}

else if (n == 4)

break;

else

cout<<"输入错误 请重新键入"<<endl;

}

return 0;

}


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-119998-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 石秋芳
        石秋芳

        从现在抓起一百年以后我看还是有希望的

      • 杨波
        杨波

        我们不嫌她老

      热点图片
      拼命载入中...