当前位置:首页 » 编程语言 » 集合的编程c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

集合的编程c语言

发布时间: 2022-04-20 03:57:40

❶ 用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]=''
for(i=0;i<j;i++)
printf("%c,",temp[i]);
printf("} ");
//CuA
printf(" CuA: {");
for(ch='a'ch<='z'ch++)
{
for(i=0;i<l1;i++)
if(ch==str1[i]) goto NOT;
printf("%c,",ch);
NOT:if(0);
}
printf("} ");
//CuB
printf(" CuB: {");
for(ch='a'ch<='z'ch++)
{
for(i=0;i<l2;i++)
if(ch==str2[i]) goto NOT2;
printf("%c,",ch);
NOT2:if(0);
}
printf("} ");
}

❷ 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;
}

❸ C语言编程 已知集合A和B,求A和B的并集C (1)集合B的元素 个数送M,集合A的元素个数送N。

摘要 #include

❹ C语言编程:顺序表实现集合的交与并 LA:3,6,9 LB:1,3,5,7,9,10

顺序表本质上就是底层的数组,要用顺序表来模拟集合,首先要对顺序表进行排序,如果不排序直接求交集,则时间复杂度是O(n^2),而排序的时间复杂度可以做到O(n*logn),排好序之后再求交集或者并集,时间复杂度就变为了O(n)。
顺序表的排序可以直接调用系统函数qsort。

❺ 如何用C语言编程显示集合中的每一个元素

你说的不清楚,你要得是不是这个?
#include<stdio.h>
#define m 10
void main()
{
int a[m],i,j;
for(i=0;i<m;i++)
scanf("%d",&a[i]);
printf("该集合为:");
for(j=1;j<m;j++)
printf("%d",a[j]);
}

❻ C语言编程 已知集合A和B,求A和B的并集C

咨询记录 · 回答于2020-12-14

❼ C语言编程 集合子集问题

#include<iostream>
#include<string>
#include<fstream>
#include<conio.h>
usingnamespacestd;
//定义集合的最大数量,可以自己修改
#defineMAX_COUNT100
//集合使用数组来保存
intSetA[MAX_COUNT];
intSetB[MAX_COUNT];
intCountA=0;//集合A的长度
intCountB=0;//集合B的长度
///函数Contains,判定集合是否包含一个数
///@paramset,集合
///@paramcount,集合Set中的元素个数
///@paramvalue,是否包含的值
///@returnset包含value,返回true,否则返回false
boolContains(intset[],intcount,intvalue)
{
for(inti=0;i<count;i++)
if(value==set[i])
returntrue;
returnfalse;
}
//输入一个集合
voidInputSet(intset[],int&count)
{
strings;
//读取这一行
getline(cin,s);
inti=0;
while(i<s.length())
{
intspacePos=0;
spacePos=s.find('',i);//查找空格下一个空格的位置
if(spacePos<0||spacePos>=s.length()-1)//如果没有空格或者空格超出了字符串范围,跳出循环
break;
stringtemp=s.substr(i,spacePos-i);
if(temp=="")//如果字符串为空,执行下一条
continue;
intvalue=stoi(temp);
if(!Contains(set,count,value))//如果集合中已经包含此数字了,就不再添加
set[count++]=value;
i=spacePos+1;
}
//读取最后一个数
stringtemp=s.substr(i,s.length()-i);
intvalue=stoi(temp);
if(!Contains(set,count,value))
set[count++]=value;
}
//判断是为setB是否为setA的子集
boolIsSubSet(intsetA[],intcountA,intsetB[],intcountB)
{
for(inti=0;i<countB;i++)
if(!Contains(setA,countA,setB[i]))
returnfalse;
returntrue;
}
voidmain()
{
cout<<"注意:只能输入整数,并且数字之间以空格隔开。"<<endl<<endl;
cout<<"请输入集合A:"<<endl;
InputSet(SetA,CountA);
cout<<"请输入集合B:"<<endl;
InputSet(SetB,CountB);
cout<<endl;
cout<<"集合A和集合B比较结果"<<endl;
if(IsSubSet(SetA,CountA,SetB,CountB))
cout<<"集合B是集合A的子集"<<endl;
else
cout<<"集合B不是集合A的子集"<<endl;
cout<<endl;
cout<<"按任意键退出"<<endl;
getch();
}

❽ 关于集合的交集并集差集的C语言程序

#include <algorithm>
#include <iostream>
#include <iterator>
#include <list>
using namespace std;

int main()
{
int a[]={1,5,8,12,5,-5,32};
int b[]={3,5,1,-3,10};

list< int > set1(a,a+sizeof(a)/sizeof(int));
list< int > set2(b,b+sizeof(b)/sizeof(int));
list< int > result;

set1.sort();
set2.sort();

//交集
set_intersection(set1.begin(),set1.end(),set2.begin(),set2.end(),back_inserter(result));
(result.begin(),result.end(),ostream_iterator< int >(cout," "));
cout<<endl;
result.clear();

//并集
set_union(set1.begin(),set1.end(),set2.begin(),set2.end(),back_inserter(result));
(result.begin(),result.end(),ostream_iterator< int >(cout," "));
cout<<endl;
result.clear();

//差集
set_difference(set1.begin(),set1.end(),set2.begin(),set2.end(),back_inserter(result));
(result.begin(),result.end(),ostream_iterator< int >(cout," "));

return 0;
}

❾ 用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); //输出累积者的尾
}
}
}
}