Даны массивы целых: X из p элементов, Y из q элементов, Z из r элементов (p,q,r меньше =50). Элементы массивов упорядоченные по возрастанию. Выяснить, есть ли такие числа, которые встречаются в каждом из трех массивов. Найти од...

Даны массивы целых: X из p элементов, Y из q элементов, Z из r элементов (p,q,r<=50). Элементы массивов упорядоченные по возрастанию. Выяснить, есть ли такие числа, которые встречаются в каждом из трех массивов. Найти одно из таких чисел или сообщить об его отсутствии.
Гость
Ответ(ы) на вопрос:
Гость
Одно из "быстрых по написанию" решений, не учитывающих фактор наличия упорядоченности массивов. Это разумно: 10 баллов за решение - не та цена, за которую есть смысл составлять и отлаживать эффективный алгоритм поиска по упорядоченным массивам. // PascalABC.NET 3.1, сборка 1256 от 21.06.2016 begin   var x:=ArrRandom(ReadInteger('p='),-20,20).Sorted;   var y:=ArrRandom(ReadInteger('q='),-10,15).Sorted;   var z:=ArrRandom(ReadInteger('r='),1,18).Sorted;   x.Println; y.Println; z.Println;   var r:=x.Intersect(y.Intersect(z));   if r.Count=0 then Writeln('Нет общих элементов')   else begin Write ('Общие элементы: '); r.Println end end. Тестовое решение p= 15 q= 13 r= 18 -19 -16 -15 -11 -7 -7 -2 0 0 2 4 7 10 14 20 -8 -6 -4 -4 -4 -3 -1 4 4 9 13 13 15 1 1 2 2 2 4 4 5 6 9 10 12 12 14 14 15 15 17 Общие элементы: 4
Гость
//Школьный вариант с уродливым "пузырьком" //Pascal ABC.NET 3.1 сборка 1256 Const  n=10;  m=20;  z=30; Var  ar1:array[1..n] of integer;  ar2:array[1..m] of integer;  ar3:array[1..z] of integer;  i,k,j:integer;  b:boolean; begin randomize; k:=-1; b:=false;   for i:=1 to n do     ar1[i]:=random(20);   for i:=1 to n-1 do    for j:=i+1 to n do     if ar1[i]>ar1[j] then swap(ar1[i],ar1[j]);   writeln('Array 1:');   for i:=1 to n do    write(ar1[i]:4);   writeln;   for i:=1 to m do     ar2[i]:=random(20);   for i:=1 to m-1 do    for j:=i+1 to m do     if ar2[i]>ar2[j] then swap(ar2[i],ar2[j]);     writeln('Array 2:');   for i:=1 to m do    write(ar2[i]:4);   writeln;   for i:=1 to z do     ar3[i]:=random(20);   for i:=1 to z-1 do    for j:=i+1 to z do     if ar3[i]>ar3[j] then swap(ar3[i],ar3[j]);    writeln('Array 3:');   for i:=1 to z do    write(ar3[i]:4);    for i:=1 to n do     begin      k:=-1;      for j:=1 to m do      if ar1[i]=ar2[j] then        begin        k:=ar1[i];        break;       end;      if k=-1 then continue;      for j:=1 to z do      if k=ar3[j] then       begin        b:=true;        break;       end;     if b=true then break;    end;  writeln;  writeln('Result:');  if b=false then writeln('Нет') else writeln(k); end. 
Не нашли ответ?
Ответить на вопрос
Похожие вопросы