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个人都是坏人的m的最小值。 输入样例: 4 输出样例: 30 程序: program progaram1; var i,k,m,start:longint; find:boolean; function check(remain:integer):boolean; var result:integer; begin result:=____(1)____ mod remain; if ____(2)____ then begin start:=result; check:=true; end else check:=false; end; begin find:=false; read(k); m:=k; while ____(3)____ do begin find:=true; start;=0; for i:=0 to k-1 do if (not check(____(4)____)) then begin find:=false; break; end; inc(m); end; writeln(____(5)____); end.
发表评论 取消回复