База ответов ИНТУИТ

Программирование на языке Pascal

<<- Назад к вопросам

Имеется набор натуральных чисел, быть может, с повторениями. Необходимо разделить его на два поднабора так, чтобы разность сумм весов была минимальной. Эта задача решается рекурсивным методом полного перебора с отсечением (см. ниже). На вход были поданы числа 36 72 45 2 38 96 15 2 2. При какой глубине стека контекстов произойдет завершение работы программы (обращение к завершающей процедуре out())?
{массив а хранит веса всех предметов, в порядке их ввода, half - "большая" половина суммы всех весов, dif - отклонение текущей найденной суммы от half}procedure rec(k: byte; sum: longint; var dif: longint);var i: byte;begin if sum+a[k]<=half        then for i:= k+1 to n do rec(i,sum+a[k],dif)        else if half-sum<dif               then begin                     dif:= half-sum;                    if dif<2 then out(dif){печать и завершение}                   endend;

(Отметьте один правильный вариант ответа.)

Варианты ответа
0
4(Верный ответ)
1
9
7
Похожие вопросы
Имеется набор натуральных чисел, быть может, с повторениями. Необходимо разделить его на два поднабора так, чтобы разность сумм весов была минимальной. Эта задача решается рекурсивным методом полного перебора с отсечением (см. ниже). На вход были поданы числа 18 32 5 5 6 2 78 4 56 5 2. При какой глубине стека контекстов произойдет завершение работы программы (обращение к завершающей процедуре out())?
{массив а хранит веса всех предметов, в порядке их ввода, half - "большая" половина суммы всех весов, dif - отклонение текущей найденной суммы от half}procedure rec(k: byte; sum: longint; var dif: longint);var i: byte;begin if sum+a[k]<=half        then for i:= k+1 to n do rec(i,sum+a[k],dif)        else if half-sum<dif               then begin                     dif:= half-sum;                    if dif<2 then out(dif){печать и завершение}                   endend;
Имеется набор натуральных чисел, быть может, с повторениями. Необходимо разделить его на два поднабора так, чтобы разность сумм весов была минимальной. Эта задача решается рекурсивным методом полного перебора с отсечением (см. ниже). На вход были поданы числа 45 48 32 12 12 15 46 2 2 3 15. При какой глубине стека контекстов произойдет завершение работы программы (обращение к завершающей процедуре out())?
{массив а хранит веса всех предметов, в порядке их ввода, half - "большая" половина суммы всех весов, dif - отклонение текущей найденной суммы от half}procedure rec(k: byte; sum: longint; var dif: longint);var i: byte;begin if sum+a[k]<=half        then for i:= k+1 to n do rec(i,sum+a[k],dif)        else if half-sum<dif               then begin                     dif:= half-sum;                    if dif<2 then out(dif){печать и завершение}                   endend;
Какие переменные будут существовать во время выполнения подпрограммы f?
program prog;var a: byte;procedure p1; var a: byte; begin  ... end;procedure p2; function f: boolean;  var a: byte;  begin   ...  end; var a: byte; begin  ... end;
Какие переменные будут существовать во время выполнения подпрограммы p2?
program prog;var a: byte;procedure p1; var a: byte; begin  ... end;procedure p2; function f: boolean;  var a: byte;  begin   ...  end; var a: byte; begin  ... end;
Какие переменные будут существовать во время выполнения подпрограммы p1?
program prog;var a: byte;procedure p1; function f: boolean;  var a: byte;  begin   ...  end; var a: byte; begin  ... end;procedure p2;var a: byte; begin  ... end;
Какие из приведенных ниже отрывков программ хорошо структурированы?
1)	procedure step(v,k: byte; r: longint);var j: byte;begin if r < min then   if k = N-1      then min:= r     else for j:= 1 to N do            if (sm[v,j]<>0)and(mark[j]=0)              then begin                    mark[j]:= 1;                    step(j,k+1,r+sm[v,j]);                    mark[j]:= 0                    end;end;2)	for i:= 1 to N-1 dobeginfor x:= 1 to N doif (sm[last,x]<>0)and(not done[x])then dist[x]:= min(dist[x],dist[last]+sm[last,x]);min_dist:= MaxLongInt;for x:= 1 to N doif (not done[x])and(min>dist[x])then begin min_dist:= dist[x];last:= x; end;done[last]:= true;end;3)while head<>nil do begin  with head^.e^ do  if from^.dist+len < toward^.dist then begin     toward^.dist:= from^.dist + len;     enqueue(toward,queue,head);  end;  next_head:= head ^.next;  dispose(head);  head:= next_head end;4)	procedure infix(var p: ukaz);begin read(c);  case c of  '('            : begin new(p); infix(p^.left) end;  '+','-',*','/' : begin p^.symbol:= c;                          infix(p^.right)                    end;  ')'            : {ничего не делаем};  else             begin p^.symbol:= c;                          p^.right:= nil;                          p^.left:= nil;                    end; end;end;
Какое значение будет храниться в поле a записи r2 после выполнения следующего блока?
var a: integer;    r1: record a: longint;               ...        end;    r2: record a: byte;               ...        end;begin a:= 0; with r2 do   begin   a:= 10;   with r1 do    begin a:= -r2.a;          r2.a:= 100;    end;   a:= r1.a;  end; a:= -100;end.
Какое значение получит переменная a после выполнения такой программы?
var a: byte;proc p1(k: byte);proc p2(var t: byte); begin t:= t*2 end;var a: byte; begin a:= 1;       k:= 5;       p2(a); end;begin a:= 10; p1(a);end.
Какое значение получит переменная a после выполнения такой программы?
var a: byte;proc p1(var k: byte);proc p2(t: byte); begin t:= t*2 end;var a: byte; begin a:= 1;       k:= 5;       p2(k); end;begin a:= 10; p1(a);end.
Какое значение получит переменная a после выполнения такой программы?
var a: byte;proc p1(var t: byte); begin t:= t*2 end;proc p2(var k: byte);var a: byte; begin a:= 1;       k:= 5;       p1(k); end;begin a:= 10; p2(a);end.