不是VIP会员,不能显示答案

题目解答

题目:
Joseph
题目描述:
原始的Joseph问题的描述如下:有n个人围坐在一个圆桌周围,把这n个人依次编号为1,……,n。从编号是1 的人开始报数,数到m个人出列,然后从出列的下一个人重新开始报数,数到第m个人又出列,……,如此反复直到所有的人全部出列为止。比如当n=6,m=5的时候,出列的顺序依次是5,4,6,2,3,1。
现在的问题是:假设有k个好人和k个坏人。好人的编号是1到k,坏人的编号是k+1到2k。我们希望求出m的最小值,使得最先出列的k个人都是坏人。
输入:
仅有的一个数字是k (0<K<14)。
输出:
使得最先出列的k个人都是坏人的m的最小值。
输入样例:
4
输出样例:
30
程序:
program progaram1;
var
  i,k,m,start:longint;
  find:boolean;
function check(remain:integer):boolean;
var result:integer;
begin
  result:=____start+m-1____ mod remain;
  if ____result>=k____ then begin
start:=result; check:=true;
  end
  else check:=false;
end;
begin
  find:=false;
  read(k);
  m:=k;
  while ____not(find)____ do begin
find:=true; start:=0;
for i:=0 to k-1 do 
  if (not check(____2*k-I____)) then begin
     find:=false; break;
  end;
inc(m);
  end;
  writeln(____m-1____);
end.
考点:
分析:
解答:
评论:
老师: