Advertisement
ivanovr

Untitled

Oct 17th, 2018
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.09 KB | None | 0 0
  1. procedure TForm32.Button1Click(Sender: TObject);
  2. var firstIsRed: boolean;
  3.     n: integer;
  4.  
  5.   procedure Recurse(remainRed, remainBlue: integer; previousIsRed: boolean);
  6.   begin
  7.     if (remainRed = 0)and(remainBlue = 0) then begin
  8.       // все камни разложили. Если первый красный, то последний не должен быть красным
  9.       if firstIsRed and previousIsRed then exit;
  10.       n := n + 1;
  11.     end else
  12.     if previousIsRed then begin
  13.       // предыдущий красный, так что можно только синий
  14.       if remainBlue > 0 then Recurse(remainRed, remainBlue-1, false);
  15.     end else begin
  16.       // предыдущий синий, значит можно красный или синий
  17.       if remainRed > 0 then Recurse(remainRed-1, remainBlue, true);
  18.       if remainBlue > 0 then Recurse(remainRed, remainBlue-1, false);
  19.     end;
  20.   end;
  21.  
  22. begin
  23.   n := 0;
  24.   firstIsRed := true;
  25.   Recurse(4-1, 8, firstIsRed);
  26.   firstIsRed := false;
  27.   Recurse(4, 8-1, firstIsRed);
  28.   ShowMessage(IntToStr(n));
  29. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement