C语言编程 集合子集问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言编程 集合子集问题相关的知识,希望对你有一定的参考价值。
本训练中的每类问题都是系列问题,每个问题必须用至少一个子函数来实现
集合运算问题
设集合A=al , a2, a3… ,am ,集合B=bl , b2,… ,bn,则求下列运算
l)判断a∈A
2)判断集合B是否为集合A的子集
说明一下,1,,2 ,,,条件是两个不同的程序--。
#include<string>
#include<fstream>
#include<conio.h>
using namespace std;
//定义集合的最大数量,可以自己修改
#define MAX_COUNT 100
//集合使用数组来保存
int SetA[MAX_COUNT];
int SetB[MAX_COUNT];
int CountA = 0; //集合A的长度
int CountB = 0; //集合B的长度
///函数Contains,判定集合是否包含一个数
///@param set, 集合
///@param count, 集合Set中的元素个数
///@param value, 是否包含的值
///@return set包含value,返回true,否则返回false
bool Contains(int set[], int count, int value)
for(int i = 0; i < count; i++)
if(value == set[i])
return true;
return false;
//输入一个集合
void InputSet(int set[], int &count)
string s;
//读取这一行
getline(cin, s);
int i = 0;
while(i < s.length() )
int spacePos = 0;
spacePos = s.find(' ', i); //查找空格下一个空格的位置
if(spacePos < 0 || spacePos >= s.length() - 1) //如果没有空格或者空格超出了字符串范围,跳出循环
break;
string temp = s.substr(i, spacePos - i);
if(temp == "") //如果字符串为空,执行下一条
continue;
int value = stoi(temp);
if(!Contains(set, count, value)) //如果集合中已经包含此数字了,就不再添加
set[count++] = value;
i = spacePos + 1;
//读取最后一个数
string temp = s.substr(i, s.length() - i);
int value = stoi(temp);
if(!Contains(set, count, value))
set[count++] = value;
//判断是为setB是否为setA的子集
bool IsSubSet(int setA[], int countA, int setB[], int countB)
for(int i = 0; i < countB; i++)
if( !Contains(setA, countA, setB[i]))
return false;
return true;
void main()
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();
参考技术A #include <stdio.h>
#define A 5 //数组的大小采用宏定义,方便修改
#define B 3
void Contain (int a[], int num);
void Compare (int a[], int b[]);
int main ()
int a[A] = 1, 2, 3, 4, 5; //数组的元素可以自己设置去验证
int b[B] = 1, 2, 6;
int flag = 0;
printf("Input a num:");
scanf("%d", &flag);
Contain (a, flag);
Compare (a, b);
return 0;
/*
a ∈ A ?
*/
void Contain (int a[], int num)
int i;
for(i=0; i<A; i++)
if(num == a[i])
printf("%d ∈ A\\n", num);
break;
// printf("i = %d\\n", i);
if(i == 5)
printf("%d !∈ A\\n", num);
return;
/*判断集合B是否为集合A的子集 */
void Compare (int a[], int b[])
int i, j;
//如果b数组大小比a数组大
if(sizeof(b)>sizeof(a))
printf("B不是A的子集.\\n");
return;
for(i=0; i<B; i++)
for(j=0; j<A; j++)
if(b[i] != a[i])
printf("B不是A的子集.\\n");
return;
printf("B是A的子集.\\n");
追问
1,2条件是两个不同的程序--。
追答两个main?拆一下就行了我把文件上传给你吧,你看看这两个文件。
以上是关于C语言编程 集合子集问题的主要内容,如果未能解决你的问题,请参考以下文章