當前位置:首頁 » 編程語言 » c語言中集合問題怎麼做
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言中集合問題怎麼做

發布時間: 2022-04-29 07:03:46

① 如何利用c語言實現集合的運算

這種集合問題,一般是使用鏈表來處理。
比如說有兩個鏈表list1,list2,它們分別用來存儲集合A,B
如果要對A,B進行並運算,
那麼可以首先定義一個新的鏈表list3,然後讓list1和list2的值進行循環的比較,如果有相同的值,那麼就將這個值放入list3中,直到沒有相同的值為止。
大致的演算法就是這樣了。

② 如何用C語言做出「完成集合運算的並集,交

定義兩個數組存放這兩個集合,再定義一個數組存放它們的集合,用類似冒泡排序的演算法,遍歷數組1中的第一個元素和數組2中每一個元素,若有相同的,則把這個元素放入第三個數組,繼續遍歷,知道數組1遍歷完所有元素,那數組3中的元素,即為兩個數組(集合)的交集。

③ C語言實現集合合並的問題

C語言沒有提供這樣的功能,只能自己寫個函數了
但是我感覺你所謂的「合並」很模糊。
如果是12和34,合並是變成了46呢還是1234?
如果是char數組,難道合並以後這個變成了兩個字元碼?
把這些考慮清楚了就可以自己寫個函數,如果不會把你的想法告訴我,我可以幫你寫一個
***************************************************
你這個補充的就難了,如果是把兩個數字合在一起還好,但是是集合,而且集合裡面的元素個數還不是固定的,這樣的話我想直接用C語言編寫太難了(C語言沒有foreach),當作為參數傳遞進來的時候,即使是數組也已經轉化成為了指針,而且是數字,沒有『\0'作為標識來結束,誰都不知道到底裡面放了幾個數字,這怎麼合並呢?

④ 怎樣用語言c語言實現集合的合並,交集

通過你描述的問題,正確的交集代碼如下:
void
bing(char
a[],char
b[],int
m,int
n)
{
char
d[400];
int
i=0,j=0,s=m;
for(i=0;i<m;i++)
d[i]=a[i];
for(i=0;i<n;i++){
for(j=0;j<m;j++)
{
if(b[i]==a[j])
break;
}
if(j==m)
d[s++]=b[i];
}
cout<<"集合並集是:";
for(i=0;i<s;i++)
cout<<d[i]<<"
";
}

⑤ 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語言編寫集合子集的程序怎麼寫

首先,你的題目和舉例不相符啊。題目是{ 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); //輸出累積者的尾
}
}
}
}

⑦ C語言 集合運算

Deletetable函數有兩個地方把pcollelm寫成了collelm
Addition函數體第4行沒加分號
Addition函數中3次調用AppendToTable時都寫了3個參數,但AppendToTable只聲明了2個參數
Multiply的返回類型寫了collelm,應該是pcollelm
Multiply的函數參數是x,y,但函數體裡面寫的是a,b
Multiply里調用AppendToTable時,p的前面不用寫類型
main的第3行,p=collp;改成p=&collp;
main裡面case 2調用Deletetable時,第一個參數是Collelm類型的colla,但Deletetable對應的參數類型是Collelm *

⑧ C語言集合問題

for循環中第一個條件是初始條件,把c=0加裡面只是在剛開始給c賦值,之後每次循環的c就是之後++的值,你的目的是每次循環的時候c=0,如果a的值與b的值不想等,c就自加1,當i=1時,c不能清0,所以要在for循環裡面加上c=0,而不是在for的條件里,像這樣
for(i=0;i<n;i++)
{
c=0;
...

⑨ 用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;

}

(9)c語言中集合問題怎麼做擴展閱讀:

集合中元素的數目稱為集合的基數,集合A的基數記作card(A)。當其為有限大時,集合A稱為有限集,反之則為無限集。一般的,把含有有限個元素的集合叫做有限集,含無限個元素的集合叫做無限集。

表示

假設有實數x < y:

①[x,y] :方括弧表示包括邊界,即表示x到y之間的數以及x和y;

②(x,y):小括弧是不包括邊界,即表示大於x、小於y的數。

⑩ 關於集合問題 C#高手請進

c# 實現字元串倒序的n 種寫法
最簡潔就是linq的寫法,推薦
// string concatenation with for loop
public string ReverseA(string text)
{
char[] cArray = text.ToCharArray();
string reverse = String.Empty;
for (int i = cArray.Length - 1; i > -1; i--)
{
reverse += cArray[i];
}
return reverse;
}

// Array.Reverse function
public string ReverseB(string text)
{
char[] charArray = text.ToCharArray();
Array.Reverse(charArray);
return new string(charArray);
}

// push/pop Stack<>
public string ReverseC(string text)
{
Stack resultStack = new Stack();
foreach (char c in text)
{
resultStack.Push(c);
}

StringBuilder sb = new StringBuilder();
while (resultStack.Count > 0)
{
sb.Append(resultStack.Pop());
}
return sb.ToString();
}

// LINQ
public string ReverseD(string text)
{
return new string(text.ToCharArray().Reverse().ToArray());
}

// StringBuilder
public string ReverseE(string text)
{
char[] cArray = text.ToCharArray();
StringBuilder reverse = new StringBuilder();
for (int i = cArray.Length - 1; i > -1; i--)
{
reverse.Append(cArray[i]);
}
return reverse.ToString();
}