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]='