我真的需要帮助,因为这个练习让我发疯。
我们必须合并两个单独的、已排序的数组。然而,第三个数组只能包含每个数组唯一的数字,因此如果两个数组中都有一个数字,则不允许显示。
我已经坐在这里好几天了,我尝试了一切可能的方法,但我确实想不出解决方案。我真的快绝望了。我知道如何合并两个已排序的数组,但我不知道如何只能添加唯一的数字。示例:
a1 = (1, 2, 3, 4, 4, 4, 5, 5, 6)
a2 = (1, 4, 7, 9)
a3 = (2, 3, 5, 5, 6, 7, 9)
到目前为止我的代码如下:
PROGRAM MergeArraysProgram;
PROCEDURE MergeArrays(a1: ARRAY OF INTEGER;
n1: INTEGER;
a2: ARRAY OF INTEGER;
n2: INTEGER;
VAR a3: ARRAY OF INTEGER;
VAR n3: INTEGER);
VAR
i: INTEGER;
j: INTEGER;
BEGIN
n3 := 0;
i := 0;
j := 0;
FOR i := 0 TO n1-1 DO BEGIN
FOR j := 0 TO n2-1 DO BEGIN
IF a2[j] = a1[i] THEN BEGIN
a2[j] := a2[j+1];
END;
END;
END;
i := 0;
j := 0;
WHILE (i < n1) AND (j < n2) DO BEGIN
IF a1[i] < a2[j] THEN BEGIN
a3[n3] := a1[i];
n3 := n3 + 1;
i := i + 1;
END;
IF a1[i] > a2[j] THEN BEGIN
a3[n3] := a2[j];
n3 := n3 + 1;;
j := j + 1;
END;
IF (i < n1) AND (j < n2) AND (a1[i] = a2[j]) THEN BEGIN
i := i + 1;
j := j + 1;
END;
END;
WHILE (i < n1) DO BEGIN
a3[n3] := a1[i];
n3 := n3 + 1;
i := i + 1;
END;
WHILE (j < n2) DO BEGIN
a3[n3] := a2[j];
n3 := n3 + 1;
j := j + 1;
END;
END;
我什么也想不起来了。我的头已经痛了,我在网上找不到任何相关内容,至少我不明白它或者它有一个完全不同的上下文。如果有人能给我提示或帮助我,我将非常感激。 我会失去理智
IF (i < n1) AND (j < n2) AND (a1[i] = a2[j]) THEN BEGIN
i := i + 1;
j := j + 1;
END;
如前所述:在 3 种情况下,你知道某个东西是重复的:a1[i]=a2[j]、a1[i]=a1[i+1]、a2[j]=a2[j+1]。 – 马克·兰塞姆 昨天评论了
所以在这里,你要做的就是添加一个新的 var , 例子:
var k : integer;
IF (i < n1) AND (j < n2) AND (a1[i] = a2[j]) THEN BEGIN
k:= a1[i];
while (k=a1[i]) do i+=1;
while (k=a1[j]) do j+=1;
END;
你的问题不会得到解决,但我想它会帮助你解决它