если уж очень хитро то так -
Код:
program Task1;
uses
SysUtils;
function HDiv(A, B: Integer): Integer;
{Делит a на b возвращая результат или 0 в случае невозможности}
function Recurse(Min, Max: Integer): Integer;
var
Res: Integer;
begin
if Min = Max then
begin
if B * Min = A then
Recurse := Min
else
begin
Recurse := 0;
end;
end else
begin
Res := (Max + Min) div 2;
if B * Res = A then
Recurse := Res
else
if B * Res > A then
begin
if Res = Max then
Recurse := 0
else
Recurse := Recurse(Min, Res)
end else
begin
if Res = Min then
Recurse := 0
else
Recurse := Recurse(Res, Max);
end;
end;
end;
begin
if B > A div 2 then {совсем без деления - Max := A shr 1}
begin
if A = B then
HDiv := 1
else
HDiv := 0;
end else
HDiv := Recurse(2, A div 2);
end;
var
c: Integer;
begin
c := HDiv(120, 6); {сюда вставляются числа}
if c = 0 then
Writeln('Inaccessible result')
else
Writeln('Result - ', c);
Readln;
end.
- хотя нормальный человек просто отнимал бы в цикле b от a до получения результата