当前位置:首页 » 编程语言 » c语言集合交集

c语言集合交集

发布时间: 2023-02-13 20:22:15

c语言中有没有比较简单的算法来判断两个集合有交集

只判断有没有交集的话很简单了,直接挨个比较就可以了,如果有相同的返回1,没相同的返回0。

如果要求2个数组相交的元素的话自己写一个代码也可以,或者可以直接使用STL算法中的set_intersection函数。

㈡ 如何用C语言编写求交集和并集的程序

char c[20];//存储交集的字符int count=0;//统计交集个数for (n=1;n<j;n++)
for (m=1;m<=k;m++)
{
if(a[n]==b[m]) { c[count]=a[n]; count++; }
}
} c[count]='\0';printf("交集为%s",c);

㈢ C语言怎么用函数求集合的交集

首先,如果是数学上的集合概念,那就说明,集合A自身的每个元素都不相同。
那么,程序就可以简化成,
设数组key[52],用于记录字母出现次数。
扫描一次集合A,把出现的字母计到key的对应位置里。
同理扫描一次集合B。
查看key数组,>=2的对应字母输出到集合C,C就是所求交集。

㈣ 实验、集合的交、并差 用c语言

#include"stdio.h"

intinput(intd[],intn)
{
inti;
//n=0;
do
{
scanf("%d",d+n);
n+=1;
}while(d[n-1]>=0);
d[n-1]='';
returnn-1;
}
voidsort(intd[],int*n)
{
inti,j,t,k;
for(i=0;i<*n-1;i++)
{
for(j=*n-1;j>i;j--)
{ if(d[j]==d[j-1])
{
*n-=1;
for(k=j;k<*n;k++)
d[k]=d[k+1];
}
if(d[j]<d[j-1])
{
t=d[j];d[j]=d[j-1];d[j-1]=t;
}

}
}
}
intfn(intd1[],intnum1,intd2[],intnum2)
{
inti,j,m;

for(i=0;i<num1;i++)
{
m=0;
for(j=0;j<num2;j++)
{
if(d1[i]==d2[j])
{
m=1;
break;
}
}
if(m==0)
printf("%d,",d1[i]);
}
}
intmain()
{
intA[100],B[100],C[200];
intnuma,numb,n;
inti,j;
//输入
printf("inputsortA:");
numa=input(A,0);
sort(A,&numa);
printf("inputsortB:");
numb=input(B,0);
sort(B,&numb);
//交集
printf("集合交集A∩B={");
for(i=0;i<numa;i++)
{
for(j=0;j<numb;j++)
{
if(A[i]==B[j])
{
printf("%d,",A[i]);
}

}
}
printf("} ");
//并集
n=numa+numb;
printf("集合并集A∪B={");
for(i=0;i<numa;i++)
{
C[i]=A[i];
}
for(i=numa;i<n;i++)
{
C[i]=B[i-numa];
}
sort(C,&n);
for(i=0;i<n;i++)
printf("%d,",C[i]);
printf("} ");
//集合差
printf("A-B={");
fn(A,numa,B,numb);
printf("} ");
}

㈤ 如何写一个c语言程序求两个集合的交集

定义两个数组存放这两个集合,再定义一个数组存放它们的集合,用类似冒泡排序的算法,遍历数组1中的第一个元素和数组2中每一个元素,若有相同的,则把这个元素放入第三个数组,继续遍历,知道数组1遍历完所有元素,那数组3中的元素,即为两个数组(集合)的交集。

㈥ C语言求两个字符集合的交集和并集

int i,count=0,ch1[256]={0},ch2[256]={0};
char s1[20],s2[20];

//统计字符串1的字符情况
for(i=0;i<20&&s1[i]!='\0';i++)
ch1(s1[i])++;
//统计字符串2的字符情况
for(i=0;i<20&&s2[i]!='\0';i++)
ch2(s2[i])++;

//交集
for(i=0;i<256;i++)
if(ch1[i]>0&&ch2[i]>0)
{
putchar(i);
count++;
}
if(count==0)
printf("NULL");
putchar('\n');
//并集
count=0;
for(i=0;i<256;i++)
if(ch1[i]>0&||ch2[i]>0)
{
putchar(i);
count++;
}
if(count==0)
printf("NULL");
putchar('\n');

㈦ 求教如何用C语言求两个字母集合的交集

首先,如果是数学上的集合概念,那就说明,集合A自身的每个元素都不相同。

那么,程序就可以简化成,

  1. 设数组key[52],用于记录字母出现次数。

  2. 扫描一次集合A,把出现的字母计到key的对应位置里。

  3. 同理扫描一次集合B。

  4. 查看key数组,>=2的对应字母输出到集合C,C就是所求交集。

㈧ 怎样用语言c语言实现集合的合并,交集

通过你描述的问题,正确的交集代码如下:
void
bing(char
a[],char
b[],int
m,int
n)
{
char
d[400];
int
i=0,j=0,s=m;
for(i=0;i<m;i++)
d[i]=a[i];
for(i=0;i<n;i++){
for(j=0;j<m;j++)
{
if(b[i]==a[j])
break;
}
if(j==m)
d[s++]=b[i];
}
cout<<"集合并集是:";
for(i=0;i<s;i++)
cout<<d[i]<<"
";
}

㈨ 用c语言求两个集合的交集,并集,差集

#include<stdio.h>
#include<string.h>
#include<conio.h>

#defineARR_LEN255 /*数组长度上限*/
#defineelemTypechar /*集合元素数据类型*/

/*集合数据结构*/
typedefstructset{
elemTypedata[ARR_LEN];
intlength;
}set;

/*初始化集合*/
voidinitSet(set*S){
S->length=0;
}

/*交集*/
/*A与B的交集(A∩B):既属于A又属于B的元素构成的集合*/
intsetIntersection(setA,setB,set*dest){
inti=0,j=0,k=0;
dest->length=0;
for(i=0;i<A.length;i++){/*外循环遍历A*/
for(j=0;j<B.length;j++){/*内循环遍历B*/
if(A.data[i]==B.data[j]){/*既属于A又属于B的元素,存入dest*/
dest->data[k]=A.data[i];
k++;
}
}
}
dest->length=k;
if(dest->length)
return1;
else
return0;
}

/*并集*/
/*A与B的并集(A∪B):A与B所有元素构成的集合*/
intsetUnion(setA,setB,set*dest){
inti=0,j=0,k=0;
dest->length=0;
for(i=0;i<A.length;i++){/*外循环遍历A*/
for(j=0;j<B.length;j++){/*内循环遍历B*/
if(A.data[i]==B.data[j])/*既属于A又属于B的元素,跳过*/
break;
}
if(j==B.length){/*属于A但不属于B的元素,存入dest*/
dest->data[k]=A.data[i];
k++;
}
}
for(j=0;j<B.length;j++){/*B的所有元素,存入dest*/
dest->data[k]=B.data[j];
k++;
}
dest->length=k;
if(dest->length)
return1;
else
return0;
}

/*补集*/
/*B在A中的相对补集(A\B):属于A但不属于B的元素构成的集合*/
intsetComplement(setA,setB,set*dest){
inti=0,j=0,k=0;
dest->length=0;
for(i=0;i<A.length;i++){/*外循环遍历A*/
for(j=0;j<B.length;j++){/*内循环遍历B*/
if(A.data[i]==B.data[j])/*既属于A又属于B的元素,跳过*/
break;
}
if(j==B.length){/*属于A但不属于B的元素,存入dest*/
dest->data[k]=A.data[i];
k++;
}
}
dest->length=k;
if(dest->length)
return1;
else
return0;
}

/*打印集合内容*/
intprintSet(setS){
inti;
if(S.length==0){
puts("Thesetisempty!");
return0;
}
for(i=0;i<S.length;i++)
printf("%c",S.data[i]);
putchar(' ');
return1;
}

intmain(void){
setA,B;
setAIB,AUB,ACB;/*交集、并集、补集*/

initSet(&A);initSet(&B);
initSet(&AIB);initSet(&AUB);initSet(&ACB);

strcpy(A.data,"123");
A.length=strlen(A.data);
strcpy(B.data,"4532");
B.length=strlen(B.data);

printf("A: ");
printSet(A);
printf("B: ");
printSet(B);
putchar(' ');

printf("A∩B: ");
setIntersection(A,B,&AIB);
printSet(AIB);

printf("A∪B: ");
setUnion(A,B,&AUB);
printSet(AUB);

printf("A\B: ");
setComplement(A,B,&ACB);
printSet(ACB);

getch();/*屏幕暂留*/
return0;
}

㈩ 编写程序,实现两个集合的交运算(用C语言)

#include<stdio.h>
#include<string.h>
intjiaoji(intA[],intB[],inta,intb)
{
inti,j,t;
t=a;
for(i=0;i<a;i++)
for(j=0;j<b;j++)
{
if(A[i]==B[j])
{
A[t]=B[j];
t++;
}
}
for(i=0;i<t-a;i++)
{
A[i]=A[a+i];
}
returnt-a;
}
intmain()
{
intA[50],B[50],a,b,t;
printf("请输入A的元素个数: ");
scanf("%d",&a);
printf("请输入A的元素: ");
for(inti=0;i<a;i++)
scanf("%d",&A[i]);
printf("请输入B的元素个数: ");
scanf("%d",&b);
printf("请输入B的元素: ");
for(inti=0;i<b;i++)
scanf("%d",&B[i]);
t=jiaoji(A,B,a,b);
for(inti=0;i<t;i++)
printf("%d",A[i]);
return0;
}

热点内容
安卓弹钢琴的游戏叫什么名字 发布:2024-11-08 18:38:29 浏览:250
算法用英语 发布:2024-11-08 18:37:44 浏览:994
android自动弹出输入法 发布:2024-11-08 18:19:51 浏览:275
存储器最小单位 发布:2024-11-08 18:04:49 浏览:796
服务器挂网站怎么挣钱 发布:2024-11-08 18:03:52 浏览:858
csqlserver 发布:2024-11-08 17:43:08 浏览:207
sql绿色 发布:2024-11-08 17:26:48 浏览:806
安卓手机如何更新红标 发布:2024-11-08 17:25:23 浏览:63
python正则空格 发布:2024-11-08 17:14:18 浏览:235
蟑螂数据库 发布:2024-11-08 17:13:07 浏览:781