c語言的並集
#include<stdio.h>
#include<stdlib.h>
#include<time.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;i<count;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;i<count;i++)
{
printf("%d\t",num[i]);
}
printf("\n");
}
B. 如何用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. 用C語言求兩個整數集合的並集.
有a、b 2個數組,把b中每個元素分別和a中每個元素比較,若無重復,則加入數組a。這樣的話一個for語句,再加一個功能函數(也可以寫在主函數中)就好。
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
char a[20],b[20];
int n,m,j,k;
printf ("請輸入第一個集合內容 ");
scanf ("%s",a);
j=strlen(a);
printf ("請輸入第二個集合內容 ");
scanf ("%s",b);
k=strlen(b);
char c[20]="",d[40]="";
for (n=0;n<j;n++)
printf(" %s ",c);
index=0;
for (n=0;n<j;n++)
{
for(m=0;m<index;m++)
if(d[m] == a[n])
flag=0;
d[index++]=b[n];
}
flag=1;
} printf ("集合的並集是:");
printf(" %s ",d);
return 0;
}
(3)c語言的並集擴展閱讀:
集合中元素的數目稱為集合的基數,集合A的基數記作card(A)。當其為有限大時,集合A稱為有限集,反之則為無限集。一般的,把含有有限個元素的集合叫做有限集,含無限個元素的集合叫做無限集。
表示
假設有實數x < y:
①[x,y] :方括弧表示包括邊界,即表示x到y之間的數以及x和y;
②(x,y):小括弧是不包括邊界,即表示大於x、小於y的數。
D. C語言求兩個順序表的並集
#include<stdio.h>
#define maxsize 100 //宏定義常量表示線性表的最大長度
struct Sqlist
{
int elem[maxsize]; //線性表佔用的數組空間
int last; //記錄線性表中最後一個元素在數組elem[]中的位置
};
void initlist(Sqlist &L) //初始化線性表
{
L.last=0;
}
void unionlist(Sqlist &la,Sqlist &lb) //求集合la和lb的並集
{
int i,j,e;
for(i=0;i<lb.last;i++)
{
e=lb.elem[i]; j=0; //用e記錄線性表lb中的元素
while((j<la.last)&&(la.elem[j]!=e)) j++; //掃描順序表la,直到找到值為e的元素,或掃描到表尾還沒找到
if(j==la.last)
{
la.elem[la.last]=e;la.last++; //將lb中值不為e的元素加入到la中,表長為la,lb去掉相同元素後的兩表長之和
}
}
}
void main()
{
int i;
char c;
struct Sqlist la,lb;
printf("初始化順序表\n");
initlist(la);
initlist(lb);
printf("請輸入集合a的元素\n");
for(i=0;i<maxsize;i++)
{
scanf("%d%c",&la.elem[i],&c); //輸入la的各元素,各元素之間用空格分開
la.last++;
if(c=='\n') //當輸入Enter時結束輸入
break;
}
printf("請輸入集合b的元素\n");
for(i=0;i<maxsize;i++)
{
scanf("%d%c",&lb.elem[i],&c);
lb.last++;
if(c=='\n')
break;
}
unionlist(la,lb);
printf("集合a與b的並集為:\n");
for(i=0;i<la.last;i++)
printf("%-4d",la.elem[i]);
printf("\n");
}
你的鏈表長度沒有隨著鏈表元素的增加而增加,我改過了,你試下,祝好運
E. C語言關於數組求並集的
#include<stdio.h>
intmain(void)
{
inta[5],b[5],c[10],j=0,k=0,flag;
inti;
for(i=0;i<5;i++)
scanf("%d",&a[i]);
for(i=0;i<5;i++)
scanf("%d",&b[i]);
for(i=0;i<5;i++)
c[k++]=a[i];
for(i=0;i<5;i++)
{
flag=1;
for(j=0;j<k;j++)
if(b[i]==a[j])
{
flag=0;
break;
}
if(flag)
c[k++]=b[i];
}
for(i=0;i<k;i++)
printf("%d",c[i]);
printf(" ");
return0;
}
F. c語言求並集
C語言求兩個順序表的並集函數為:
void fun(int a[],int b[],int n,int m,int c[]){
int i=0,j=0,k=0;
for (k=0;k<n+m;k++){
if(i>=n||a[i]>b[j]) {c[k]=b[j];j++;continue;}
if(j>=m||a[i]<b[j]) {c[k]=a[i];i++;continue;}
}
}
void main(){
int a[10],b[10],c[20];
printf("input a");
for(i=0;i<10;i++)scanf("%d",a+i);
printf("input b");
for(i=0;i<10;i++)scanf("%d",b+i);
fun(a,b,10,10,c);
for(i=0;i<20;i++)printf("%d ",c[i]);
}
G. 用C語言實現集合的並集
用兩個數組表示集合元素
對於AUB=C
先把A的數據 復制到C裡面
然後 遍歷B數組,每個元素和A對比,如果存在 則略過,否則添加到C中。
等到的C
即為並集
H. 用c語言給定兩個整數集合 a,b. 分別編寫函數求這兩個集合的並集(剔除重復元
#include<iostream>
usingnamespacestd;
classMergeList
{
int*a;
intsize;
public:
MergeList(intsize,intinit)
{
this->size=size;
a=newint[size];
for(inti=0;i<size;i++)
{
a[i]=init;
}
}
MergeList()
{
}
MergeList(constMergeList&obj)
{
this->size=obj.size;
a=newint[size];
for(inti=0;i<size;i++)
a[i]=obj.a[i];
}
voidSetData(int&index,int&data)
{
a[index]=data;
}
int&GetSize(){returnsize;}
~MergeList()
{
delete[]a;
}
MergeList&operator=(constMergeList&obj)
{
this->size=obj.size;
a=newint[size];
for(inti=0;i<size;i++)
a[i]=obj.a[i];
return*this;
}
boolIs_Same(int&element);
MergeListAddList(constMergeList&obj);
voidShow()
{
for(inti=0;i<size;i++)
cout<<a[i]<<"";
cout<<endl;
}
};
boolMergeList::Is_Same(int&element)
{
for(inti=0;i<size;i++)
{
if(a[i]==element)
returntrue;
}
returnfalse;
}
MergeListMergeList::AddList(constMergeList&obj)
{
MergeListC;
intm=0,i=0;
C.size=size+obj.size;
C.a=newint[C.size];
if(size<obj.size||(size==obj.size))
{
for(i=0;i<size;i++)
{
C.a[i]=a[i];
}
}
else
{
for(i=0;i<obj.size;i++)
{
C.a[i]=obj.a[i];
}
}
for(intj=0;j<obj.size;j++)
{
if(!this->Is_Same(obj.a[j]))
{
C.a[i+m]=obj.a[j];
m++;
}
}
C.size=i+m;
returnC;
}
intmain()
{
intLengthA,LengthB;
cout<<"inputlengtha:";
cin>>LengthA;
cout<<"inputlengthb:";
cin>>LengthB;
MergeListA(LengthA,2),B(LengthB,2),C;
cout<<"inputA:"<<endl;
for(inti=0;i<A.GetSize();i++)
{
inta;
cin>>a;
A.SetData(i,a);
}
cout<<"inputB:"<<endl;
for(intj=0;j<B.GetSize();j++)
{
intb;
cin>>b;
B.SetData(j,b);
}
C=A.AddList(B);
cout<<"合並後:"<<endl;
C.Show();
}
I. c語言求並集和交集的關鍵代碼,謝謝
參考代碼如下:
#include<stdio.h>
#define N 20
int A[N]={0};
int B[N]={0};
int C[N]={0};
int main()
{
int a[N]={4,6,1,11,3},na=5;
int b[N]={6,7,4,1,9,12,10,15},nb=8;
int i,j,n;
//初始化
printf("A=");
for(i=0;i<na;++i)
A[a[i]]=1;
for(i=0;i<nb;++i)
B[b[i]]=1;
for(i=0;i<N;++i)
printf("%d",A[i]);
printf("\n");
printf("B=");
for(i=0;i<N;++i)
printf("%d",B[i]);
printf("\n");
//求交集
printf("A與B的交集:\n");
for(i=0;i<N;++i)
C[i]=A[i]&&B[i];
for(i=0;i<N;++i)
if(C[i])printf("%d ",i);
printf("\n");
//求並集
printf("A與B的並集:\n");
for(i=0;i<N;++i)
C[i]=A[i]||B[i];
for(i=0;i<N;++i)
if(C[i])printf("%d ",i);
return 0;
}