Для небольших значений k вполне подойдет очередь.
var i,n,k,lf,rt,bg,nd: integer;
<span> a: array[1..50000] of integer;
</span><span>begin
</span><span> write('N = '); readln(n);
</span><span> write('K = '); readln(k);
</span><span> for i:=1 to 50000 do a[i]:=0;
</span><span> bg:=1; nd:=1;
</span><span> a[bg]:=n;
</span><span> repeat
</span><span> n:=a[bg];
</span><span> if n mod 2 = 0 then lf:=(n div 2)-1
</span><span> else lf:=n div 2;
</span><span> if n mod 2 = 0 then rt:=lf+1
</span><span> else rt:=lf;
</span><span> inc(nd);
</span><span> a[nd]:=rt; inc(nd);
</span><span> a[nd]:=lf;
</span><span> inc(bg);
</span><span> dec(k);
</span><span> if nd>49500 then
</span><span> begin
</span><span> writeln('слишком большое k');
</span><span> exit;
</span><span> end;
</span><span> until k=0;
</span><span> writeln(lf,' ',rt);
end. </span>
N = 12456987
<span>K = 23198
379 379
</span>
N = 20
<span>K = 4
</span><span>2 2
</span><span>
N = 20
K = 5
1 2
</span>
3) 1. Paint
2. Microsoft Word
4) 1. Толщина
2. Фигуры
5) 1. Фигуры
2. Заливка
3. Ластик