pascal 集合的运算

集合的运算在计算机科学应用中,我们经常要用到集合的运算,集合的运算操作有很多,下面是我们给出的集合基本运算定义:(1)“∪”运算:设S,T是2个集合,那么S∪T是由S和T... 集合的运算

在计算机科学应用中,我们经常要用到集合的运算,集合的运算操作有很多,下面是我们给出的集合基本运算定义:
(1)“∪”运算:设S,T是2个集合,那么S∪T是由S和T的元素组成的集合。
(2)“-”运算:设S,T是2个集合,那么S-T是由S中非T中的元素组成的集合。
(3)“∩”运算:设S,T是2个集合,那么S∩T是由既是S又是T的元素组成的集合。“⊕” 运算:设S,T是2个集合,那么S⊕T是由S中不是T中的元素和T中不是S中的元素组成的集合。
例如,S={1,2,3,4},T={3,4,5,6},那么:
S∪T={1,2,3,4,5,6} S-T={1,2}
S∩T={3,4} S⊕T={1,2,5,6}
你的任务就是:对于输入文件中给出的正整数集合S、T,编程求出S∪T,S-T,S∩T和S⊕T。

输入格式:
第1行,为集合S的各元素;第2行,为集合T的各元素;每行数据之间用空格分开。

输出格式:
第1行为集合S∪T;第2行为集合S-T;第3行为集合S∩T;第4行为集合S⊕T。
要求:集合的元素按由小到大顺序输出,正整数之间用空格分开;如果是空集,则输出-1。
用SET OF 好像不行的,
数据范围:
集合元素的个数≤10000,各正整数在1到30000之间。
展开
 我来答
ge372593801
2012-07-12 · 超过13用户采纳过TA的回答
知道答主
回答量:74
采纳率:0%
帮助的人:36.9万
展开全部
当然不能用集合来算了。
定义数组来算,b:array[1..30000] of boolean;
注意看为什么是30000,然后集合中有的就让b[i]为true,否则为false;
(然后最后输出的时候,
先判断是否全部为false,输出-1
否则就 for i:=1 to 30000 do if b[i] then writeln(i);)
括号内的东西可被一个记录集合内元素个数的变量t完美替代。

看你是新手,这条路很艰辛,加油!
罗马角斗士
2012-07-12 · TA获得超过504个赞
知道小有建树答主
回答量:117
采纳率:0%
帮助的人:173万
展开全部
type
arr=array [1..10000] of integer;
var
a,b:arr;
c:array [1..30000] of byte;
l1,l2:integer;
procedure readdata(var a:arr;var l:integer);
begin
l:=0;
while not eoln do begin
inc(l);
read(a[l]);
end;
readln;
end;
procedure init;
var
i:integer;
begin
fillchar(c,sizeof(c),0);
for i:=1 to l1 do
c[a[i]]:=1;
end;
procedure aa(t:byte);
var
i:integer;
begin
for i:=1 to l2 do
c[b[i]]:=t;
end;
procedure aa;
var
i:integer;
begin
for i:=1 to l2 do
inc(c[b[i]]);
end;
procedure op(n:integer);
var
i:integer;
t:boolean;
begin
t:=true;
for i:=1 to 30000 do
if c[i]=n then begin
if t then write(i)
else write(' ',i);
t:=false;
end;
if t then write(-1);
writeln;
end;
begin
readdata(a,l1);
readdata(b,l2);
init;aa(1);op(1);
init;aa(0);op(1);
init;aa;op(2);
init;aa;op(1);
end.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式