1. 用c語言編寫兩個集合的運算
記得採納哦
集合
#include "stdafx.h"
#include <stdio.h>
int fun(int a,int M[])//判斷元素是否在集合里 在返回1 不在返回0
{
int i=0;
for(i=0;M[i]!=0;i++)
if(a==M[i]) return 1;
return 0;
}
void get(int M[])//輸入集合元素
{
int i=0;
printf(" ");
do
{
scanf("%d",&M[i++]);
}
while(M[i-1]!=0);
}
void print(int M[])//列印集合
{
int i=0;
printf(" ");
while(M[i]!=0)
{
printf("%d ",M[i++]);
}
printf(" ");
}
void clear(int M[])
{
int i=0;
do
{
M[i++]=0;
}
while(M[i]!=0);
}
void fun_sum(int A[],int B[],int C[])//集合A和集合B的並集
{
int i,j;
for(i=0;A[i]!=0;i++)
{
C[i]=A[i];
}
for(j=0;B[j]!=0;j++)
{
if(!fun(B[j],C)) C[i++]=B[j];
}
}
void fun_sub(int A[],int B[],int C[])//集合A和集合B的差集
{
int i,j=0;
for(i=0;A[i]!=0;i++)
{
if(!fun(A[i],B)) C[j++]=A[i];
}
}
void fun_J(int A[],int B[],int C[])//集合A和集合B的交集
{
int i,j=0;
for(i=0;A[i]!=0;i++)
{
if(fun(A[i],B)) C[j++]=A[i];
}
}
int main(int argc, char* argv[])
{
int A[50]={0},B[50]={0},C[100]={0};
printf("請輸入集合A以0結束 ");
get(A);
printf("請輸入集合B以0結束 ");
get(B);
fun_sum(A,B,C);
printf("集合A與集合B的並: ");
print(C);
clear(C);
fun_sub(A,B,C);
printf("集合A與集合B的差: ");
print(C);
clear(C);
fun_J(A,B,C);
printf("集合A與集合B的交: ");
print(C);
return 0;
}
2. 用C語言編寫集合子集的程序怎麼寫
首先,你的題目和舉例不相符啊。題目是{ 1 ~ n },而舉例是{ 0 ~ n-1};我以題目為准吧。
如果n=5;其中後面的一部分子集按順序排是這樣的:
{5}
{1 5}
{2 5}
{3 5}
{4 5}
{1 4 5}
{2 4 5}
{3 4 5}
{1 3 4 5}
{2 3 4 5}
{1 2 3 4 5}
我們可以把一個子集看成兩個部分,一部分是前面的追趕者,另一部分是後面的累積者。
{1 5},{2 5},{3 5},{4 5}就像這些子集,追趕者從1一直追趕到了4,然後與累積者{5}相遇,累積者變成{4 5};追趕者從頭繼續從1一直追趕到了3,然後與累積者{4 5}相遇,累積者變成{3 4 5};如此反復,可以把這個全部輸出來。
而累積者始終是連續的,比如{4 5}、{3 4 5}、{2 3 4 5},所以我們只用定義累積者的頭和尾,就可以把累積者的范圍定義。
代碼如下,僅供參考:
#include <stdio.h>
void main( void )
{
int n,i,runner,start,end;
printf("請輸入正整數n的值:");
scanf("%d",&n);
printf("{}\n"); //空集必定是有的
for(end=1;end<=n;end++) //累積者的尾加一,直到n
{
printf("{%d}\n",end);
for(start=end;start>0;start--) //累積者的頭減一,直到1
{
for(runner=1;runner<start;runner++) //追趕者加一,直到遇到累積者的頭
{
printf("{");
printf("%d ",runner); //輸出追趕者
for(i=start;i<end;i++)
printf("%d ",i); //輸出累積者(不包括頭,因為累積者的尾後面不跟空格,而是跟})
printf("%d}\n",end); //輸出累積者的尾
}
}
}
}
3. c語言裡面有集合嗎
你好,不清楚你說的集合是什麼概念,但是c語言裡面有數組,表示形式和集合很相像,你可以研究研究。學c語言會學到的。加油!
中國物聯網校企聯盟技術部
4. 集合A-B的C++/C編程
C++版本:
#pragma warning(disable : 4786)
#include <set>
#include <cstdio>
using namespace std;
int main(void)
{
int n, m, t;
set <int> s;
set <int>::iterator it;
while (scanf("%d%d", &n, &m), n + m)
{
while (n--)
{
scanf("%d", &t);
s.insert(t);
}
while (m--)
{
scanf("%d", &t);
if (s.count(t)) s.erase(t);
}
for (it = s.begin(); it != s.end(); it++)
printf("%d ", *it);
printf(s.size() ? "\n" : "NULL\n");
s.clear();
}
return 0;
}
C版本:
#include<stdio.h>
int main()
{
int n,m,t,b,i,j,temp,a[100];
while(scanf("%d%d",&n,&m)&&(n!=0||m!=0))
{
t=n;
while(n--)
scanf("%d",&a[n]);
while(m--)
{
scanf("%d",&b);
for(i=0;i<t;i++)
if(a[i]==b)
{
a[i]=a[t-1];
t--;
break;
}
}
if(t==0)
printf("NULL");
else
{
for(i=0;i<t-1;i++)
for(j=0;j<t-i-1;j++)
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
for(i=0;i<t;i++)
printf("%d ",a[i]);
}
printf("\n");
}
return 0;
}
http://acm.h.e.cn/showproblem.php?pid=2034
5. C語言編程 集合子集問題
#include<stdio.h>
#defineA5//數組的大小採用宏定義,方便修改
#defineB3
voidContain(inta[],intnum);
voidCompare(inta[],intb[]);
intmain()
{
inta[A]={1,2,3,4,5};//數組的元素可以自己設置去驗證
intb[B]={1,2,6};
intflag=0;
printf("Inputanum:");
scanf("%d",&flag);
Contain(a,flag);
Compare(a,b);
return0;
}
/*
a∈A?
*/
voidContain(inta[],intnum)
{
inti;
for(i=0;i<A;i++)
{
if(num==a[i])
{
printf("%d∈A ",num);
break;
}
}
//printf("i=%d ",i);
if(i==5)
printf("%d!∈A ",num);
return;
}
/*判斷集合B是否為集合A的子集*/
voidCompare(inta[],intb[])
{
inti,j;
//如果b數組大小比a數組大
if(sizeof(b)>sizeof(a))
{
printf("B不是A的子集. ");
return;
}
for(i=0;i<B;i++)
{
for(j=0;j<A;j++)
{
if(b[i]!=a[i])
{
printf("B不是A的子集. ");
return;
}
}
}
printf("B是A的子集. ");
}
6. C語言求集合運算
可以用線性表模擬集合,把兩個線性表中一樣的數提取出來就是交集,所有元素組成的就是並集,還可以用C++重載運算符實現+就求並集之類的。
7. c語言編程,集合
動態規劃.
#include<stdio.h>
/*#include<stdlib.h>*/
#include<memory.h>
#defineN5050
intmain(intargc,char*argv)
{
intd[N];
intn,s;
while(scanf("%d",&n)!=EOF){
s=n*(n+1)>>1;
if(s&1){
printf("0 ");
}
else{
s=s>>1;
inti,j;
memset(d,0,N*sizeof(d[0]));
d[0]=1;
for(i=1;i<=n;i++){
for(j=s;j>=i;j--){
d[j]=d[j]+d[j-i];
}
}
printf("%d ",d[s]>>1);
}
}
return0;
}
8. 用C語言編寫一個集合的交,並和差運算的程序怎麼寫啊
/*第一,你的題意不明,我只能輸入兩個集合了【互異性由輸入保證】*/
#include<stdio.h>
#include<string.h>
void main()
{
char temp[60]="",str1[30]="",str2[30]="",i,j,l1,l2,ch;
printf("STR1:");
gets(str1);
printf("STR2:");
gets(str2);
l1=strlen(str1);
l2=strlen(str2);
//交集
printf(" 交集: {");
for(i=0;i<l1;i++)
for(j=0;j<l2;j++)
if(str1[i]==str2[j]) printf("%c,",str1[i]);
printf("} ");
//並集 偷懶的演算法: 合並->排序->刪除相同
printf(" 並集: {");
/*合並*/sprintf(temp,"%s%s",str1,str2);
/*排序*/
for(i=0;i<l1+l2-1;i++)
for(j=i+1;j<l1+l2;j++)
if(temp[i]>temp[j])
{
char ch;
ch=temp[i];
temp[i]=temp[j];
temp[j]=ch;
}
/*刪除相同字元*/
for(i=j=1;i<l1+l2;i++)
if(temp[i]!=temp[j-1]) temp[j++]=temp[i];
temp[j]='