当前位置:首页 » 编程语言 » 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();
}