當前位置:首頁 » 編程語言 » 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;
}

熱點內容
linux抓包工具 發布:2024-11-08 20:25:07 瀏覽:458
我的世界神奇寶貝伺服器聯機生存 發布:2024-11-08 20:17:07 瀏覽:722
溫州少兒編程 發布:2024-11-08 20:16:28 瀏覽:549
伺服器硬體有什麼 發布:2024-11-08 20:13:52 瀏覽:319
windows存儲分層 發布:2024-11-08 20:04:34 瀏覽:753
淘寶客服電腦伺服器 發布:2024-11-08 19:39:26 瀏覽:910
伺服器4t如何擴容8t 發布:2024-11-08 19:32:27 瀏覽:297
網易我的世界電腦版好玩伺服器 發布:2024-11-08 19:16:06 瀏覽:414
學校電腦配置有哪些 發布:2024-11-08 19:00:40 瀏覽:267
安卓手機音量均衡器在哪裡 發布:2024-11-08 18:55:15 瀏覽:687