使用delphi写的例子,但愿有人来看…
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
var arr1,arr2,arr3,arr4:array of Integer;
i,k,n,x:Integer;
a,b:integer;
flag:boolean;
begin
Randomize;
a:=3;
b:=5;
SetLength(arr1,a);
SetLength(arr2,b);
lst1.Clear;
repeat
flag:=True;
for i:=0 to (a-1) do
arr1[i]:=Random(5);
for i:=0 to (b-1) do
arr2[i]:=Random(6);
//由于数组1和数组2的元素是随机出来的可能存在重复
for i:=0 to (a-2) do
begin
for k:=(i+1) to (a-1) do
begin
if arr1[i]=arr1[k] then flag:=False;
end;
end;
for i:=0 to (b-2) do
begin
for k:=(i+1) to (b-1) do
begin
if arr2[i]=arr2[k] then flag:=False;
end;
end;
until flag;
//将两个数组内容比较,排除重复的
if a>b then
begin
//遍历数量少的那个数组
for i:=0 to (b-1) do
for k:=0 to (a-1) do
begin
//如果数组1和数组2有相同元素,那么去掉数组2中的相同元素
//数组1独有的元素+数组1和2共有的元素+数组2独有的元素
if arr2[i]=arr1[k] then begin
arr2[i]:=-100;
end;
end;
end
else
begin
for i:=0 to (a-1) do
for k:=0 to (b-1) do
begin
//如果数组1和数组2有相同元素,那么去掉数组2中的相同元素
//数组1独有的元素+数组1和2共有的元素+数组2独有的元素
if arr1[i]=arr2[k] then begin
arr1[i]:=-100;
end;
end;
end;
//找出少的那个数组值为-1的数量
//数组1的数量+数组2的数量-重复数量
x:=0;
//这是a>b的情况
if a>b then
begin
for i:=0 to (b-1) do
begin
if arr2[i]=-100 then x:=x+1;
end;
n:=a+b-x;
SetLength(arr3,n);
for i:=0 to (a-1) do
begin
arr3[i]:=arr1[i];
end;
if (b-x)<>0 then SetLength(arr4,b-x);
k:=0;
for i:=0 to (b-1) do
begin
if arr2[i]<>-100 then
begin
arr4[k]:=arr2[i];
k:=k+1;
end;
end;
//x=0的时候说明没有重复的
for i:=a to (b-x+a-1) do
begin
if (b-x)<>0 then arr3[i]:=arr4[i-a];
end;
end
// a<=b的情况
else
begin
for i:=0 to (a-1) do
begin
if arr1[i]=-100 then x:=x+1;
end;
n:=a+b-x;
SetLength(arr3,n);
for i:=0 to (b-1) do
begin
arr3[i]:=arr2[i];
end;
//x=0的时候说明没有重复的
if (a-x)<>0 then SetLength(arr4,a-x);
k:=0;
for i:=0 to (a-1) do
begin
if arr1[i]<>-100 then
begin
arr4[k]:=arr1[i];
k:=k+1;
end;
end;
//x=0的时候说明没有重复的
for i:=b to (a-x+b-1) do
begin
if (a-x)<>0 then arr3[i]:=arr4[i-b];
end;
end;
k:=0;
for i:= 0 to (n-1) do
begin
k:=k+1;
lst1.Items.Add(IntToStr(arr3[i]));
end;
edt1.Text:=IntToStr(k);
end;