文章目录:
- 1、如何写一个c语言程序求两个集合的交集
- 2、如何用数组实现集合的并,交和差运算
- 3、数据结构 用c语言写的 集合的并、交和差运算的程序
- 4、C++在类中实现集合的交,并,差运算,怎么做呀?
- 5、C语言用函数指针和数组指针求两个集合的交、并集?
- 6、编写程序,实现两个集合的交运算(用C语言)
如何写一个c语言程序求两个集合的交集
定义两个数组存放这两个集合,再定义一个数组存放它们的集合,用类似冒泡排序的算法,遍历数组1中的第一个元素和数组2中每一个元素,若有相同的,则把这个元素放入第三个数组,继续遍历,知道数组1遍历完所有元素,那数组3中的元素,即为两个数组(集合)的交集。
如何用数组实现集合的并,交和差运算
#include stdio.h
#include stdlib.h
#include iostream
using namespace std;
//交集
void Intersection(int a[], int b[], int m, int n)
{
cout"两集合交集:";
for(int i = 0; i m; i++)
{
for(int j = 0; j n; j++)
{
if(a[i] == b[j])
{
couta[i]' ';
break;
}
}
}
coutendl;
}
//并集
void AddSets(int a[], int b[], int m, int n)
{
int flag;
cout"两集合并集:";
for(int i = 0; i m; i++)
{
flag = true;
for(int j = 0; j n; j++)
{
if(a[i] == b[j])
{
flag = false;
break;
}
}
if(flag) couta[i]' ';
}
for(int j = 0; j n; j++)
{
coutb[j]' ';
}
coutendl;
}
//差集
void SubSets(int a[], int b[], int m, int n)
{
int flag;
cout"两集合差集:";
for(int i = 0; i m; i++)
{
flag = true;
for(int j = 0; j n; j++)
{
if(a[i] == b[j])
{
flag = false;
break;
}
}
if(flag) couta[i]' ';
}
coutendl;
}
void main()
{
int n1;
int n2;
int a[100];
int b[100];
cout"请输入第一个数组大小:";
cinn1;
cout"请输入第一个数组元素:";
for (int i = 0; i n1; i++)
{
cina[i];
}
cout"请输入第二个数组大小:";
cinn2;
cout"请输入第二个数组元素:";
for (i = 0; i n2; i++)
{
cinb[i];
}
Intersection(a, b, n1, n2);
AddSets(a, b, n1, n2);
SubSets(a, b, n1, n2);
getchar();
}
数据结构 用c语言写的 集合的并、交和差运算的程序
可以用二个一维数组,
再用两个for循环来判断结果:交,并,差
在for循环中,用一个if来判断一下,是不是a[0]==b[j],只要有相等的,就令之放在c[0]
这就是交集!!
并集就好求吧,
只要令c[i]=a[i],再来一个就是c[i+j+1]=b[j](因为我这里是考虑j=0开始的,然后自加差就是在交上改动一下就可以了,只要是a[0]!=b[j],就把它放到c[]这个数组里面去~!!!!
1:并集的程序。
求集合LA和集合LB的并集
#define NULL 0
struct JD
{ int data;
struct JD *next;
};
int find(int number,struct JD *h)
{ while(h-data)
{ if(h-data!=number)
{ h=h-next;
continue;
}
else
return 0;
}
return 1;
}
struct JD * make()
{ struct JD *h=NULL,*p=NULL;
int number,tf;
h=(struct JD *)malloc(sizeof(struct JD));
scanf("%d",h-data);
p=h;
while(p-data)
{ p-next=(struct JD *)malloc(sizeof(struct JD));
p=p-next;
p-data=0;
scanf("%d",number);
tf=find(number,h);
if(tf)
p-data=number;
else
continue;
}
return h;
}
void print(struct JD *h)
{ while(h-data)
{ printf("%d ",h-data);
h=h-next;
}
}
struct JD * change(struct JD *la,struct JD *lb)
{ struct JD *h,*p,*s,*q;
int number,tf;
p=lb;
while(p-data)
{ number=p-data;
tf=find(number,la);
p=p-next;
if(tf)
{ s=(struct JD *)malloc(sizeof(struct JD));
s-data=number;
s-next=la;
la=s;
}
else
continue;
}
return la;
}
void del(struct JD *h)
{ struct JD *p=h-next;
while(h-data)
{ free(h);
h=p;
p=p-next;
}
free(h);
}
main()
{ struct JD *la,*lb;
printf("\n\nGive the number to LA :\n\n");
la=make();
printf("\nLA is: ");
print(la);
printf("\n\nGive the number to LB :\n\n");
lb=make();
printf("\nLB is: ");
print(lb);
la=change(la,lb);
printf("\n\n\nThe new LA=LA||LB is: ");
print(la);
del(la);
del(lb);
printf("\n\n\nPass any key to exit...!\n");
getch();
}
********** 程序运行结果 **********
Give the number to LA :
1↓
2↓
3↓
5↓
0↓
LA is: 1 2 3 5
Give the number to LB :
6↓
7↓
3↓
2↓
9↓
0↓
LB is: 6 7 3 2 9
The new LA=LA||LB is: 9 7 6 1 2 3 5
--------------------------------------------------
Pass any key to exit...!
C++在类中实现集合的交,并,差运算,怎么做呀?
1,是否属于集合,就拿这个元素和集合里面的比较啊,如果想等就存在。
2,实现并,就是拿一个集合A里面的一个元素,和另外一个集合B的元素比较,如果想等就不要这个A中元素。不想等就把A中这个元素加入到B中,前提是B数组足够大。也可以再建立个C集合。
3,实现交 ,就是把集合A中元素和集合B中元素想等的取出来,放到C中。
上面主要是利用for 循环进行。
C语言用函数指针和数组指针求两个集合的交、并集?
#includestdio.h
#includestdlib.h
#includetime.h
#define NUMBER1 7
#define NUMBER2 5
void createCollect(int [],int);
void display(int [],int);
int main()
{
int collection1[NUMBER1];
int collection2[NUMBER2];
int collection3[NUMBER1+NUMBER2];
int i,j,label=0;
createCollect(collection1,NUMBER1);
for(j = 0;j NUMBER2;j++)
{
collection2[j]=j*2;
}
printf("集合1:");
display(collection1,NUMBER1);
printf("集合2:");
display(collection2,NUMBER2);
for(i = 0; i NUMBER1;i++)
{
//从集合1中取出元素,去遍历集合2中的所有元素
for(j = 0;j NUMBER2;j++)
{
//如果相同则跳出遍历
if(collection1[i]==collection2[j])
break;
}
//判断:此时存在两种情况1) 当前集合1的元素与集合2的元素相同
//2)遍历完了集合2的数组后不存在相同的元素
if(j == NUMBER2)
{
collection3[label]=collection1[i];
label++;
}
}
//把集合2的所有元素存进collection3中
for(j = 0;j NUMBER2;j++)
{
collection3[label++]=collection2[j];
}
printf("集合1与集合2的并集为:\n");
display(collection3,label);
return 0;
}
//随机生成一个不含重复元素的数组
void createCollect(int num[],int count)
{
//randValue:临时随机数存放变量
//condition:循环生成不重复的条件
int i,j,randValue,condition;
srand(time(NULL));
for(i=0;icount;i++)
{
condition=1;
while(condition){
randValue=1+(int)rand()%10;
for(j = 0;j = i;j++){
if(i==0){//第一个数不可能存在重复数,可以直接赋值
condition=0;
break;
}
if(randValue==num[j])
break;
if(randValue!=num[j]j==i-1)//当生成的随机数与当前数组最后一位不同并且下标相等时
{
condition=0;
break;
}
}
}
num[i]=randValue;
}
}
//打印数组
void display(int num[],int count)
{
int i;
for(i=0;icount;i++)
{
printf("%d\t",num[i]);
}
printf("\n");
}
编写程序,实现两个集合的交运算(用C语言)
#includestdio.h
#includestring.h
int jiaoji(int A[],int B[],int a,int b)
{
int i,j,t;
t=a;
for(i=0;ia;i++)
for(j=0;jb;j++)
{
if(A[i]==B[j])
{
A[t]=B[j];
t++;
}
}
for(i=0;it-a;i++)
{
A[i]=A[a+i];
}
return t-a;
}
int main ()
{
int A[50],B[50],a,b,t;
printf("请输入A的元素个数:\n");
scanf("%d",a);
printf("请输入A的元素:\n");
for(int i=0;ia;i++)
scanf("%d",A[i]);
printf("请输入B的元素个数:\n");
scanf("%d",b);
printf("请输入B的元素:\n");
for(int i=0;ib;i++)
scanf("%d",B[i]);
t=jiaoji(A,B,a,b);
for(int i=0;it;i++)
printf("%d ",A[i]);
return 0;
}
int m, int n){ int flag; cout"两集合并集:"; for(int i = 0; i m; i++) { flag = true; for(int j = 0; j n; j++) { if(a[i]
合的并、交和差运算的程序可以用二个一维数组,再用两个for循环来判断结果:交,并,差在for循环中,用一个if来判断一下,是不是a[0]==b[j],只要有相等的,就令之放在c[0] 这就是交集!!并集就好求吧
tion){randValue=1+(int)rand()%10;for(j = 0;j = i;j++){if(i==0){//第一个数不可能存在重复数,可以直接赋值condition=0;break;}if(randValue==num[j])break;if(randVal