猴子选王问题答案

设有二十只猴子围成一圈从零开始数凡被三整除的出圈,问谁当大王?

Delphi之解:

procedure TForm1.Button1Click(Sender: TObject);
var
  kk,mm,ii:integer;
  var_aa:array [1..20] of integer;
begin
  var_aa[1]:=1;
  for ii:=2 to 20 do
    var_aa[ii]:=0;
  kk:=0;
  ii:=1;
  mm:=20;
  while (1=1) do
  begin
    kk:=kk+1;
    if ii<20 then ii:=ii+1
    else  ii:=1;
    while (var_aa[ii]=1) do
    begin
      ii:=ii+1;
      if ii>20 then ii:=1;
    end;
    if kk mod 3 = 0 then
    begin
      var_aa[ii]:=1;
      mm:=mm-1;
    end;
    if mm=1 then break;
  end;
  for ii:=1 to 20 do
    if var_aa[ii]=0 then
    begin
      ShowMessage(IntToStr(ii));
      //break;
    end;
end;

你可能感兴趣的:(猴子选王问题答案)