當前位置:首頁 » 編程語言 » 集合的編程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); //輸出累積者的尾
}
}
}
}