Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- procedure TForm32.Button1Click(Sender: TObject);
- var firstIsRed: boolean;
- n: integer;
- procedure Recurse(remainRed, remainBlue: integer; previousIsRed: boolean);
- begin
- if (remainRed = 0)and(remainBlue = 0) then begin
- // все камни разложили. Если первый красный, то последний не должен быть красным
- if firstIsRed and previousIsRed then exit;
- n := n + 1;
- end else
- if previousIsRed then begin
- // предыдущий красный, так что можно только синий
- if remainBlue > 0 then Recurse(remainRed, remainBlue-1, false);
- end else begin
- // предыдущий синий, значит можно красный или синий
- if remainRed > 0 then Recurse(remainRed-1, remainBlue, true);
- if remainBlue > 0 then Recurse(remainRed, remainBlue-1, false);
- end;
- end;
- begin
- n := 0;
- firstIsRed := true;
- Recurse(4-1, 8, firstIsRed);
- firstIsRed := false;
- Recurse(4, 8-1, firstIsRed);
- ShowMessage(IntToStr(n));
- end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement