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之间。 展开
在计算机科学应用中,我们经常要用到集合的运算,集合的运算操作有很多,下面是我们给出的集合基本运算定义:
(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之间。 展开
2个回答
展开全部
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.
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.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询