一圈人围坐在一起。一个人开始从1喊数,第二个人喊2...遇到7的倍数和包含7的数字,就将该人清除出去,并反向循环。
要求做一个函数,迅速计算出给定人数后,那个人会坚持到最后.
要求做一个函数,迅速计算出给定人数后,那个人会坚持到最后.
解决方案 »
- 遇到一个问题,一工程提供了8字节64位float内存数值,不知该如何转换成10进制
- vsflexgrid的数组绑定问题?
- win2000下如何隐藏程序进程
- 解决了马上结贴!!!!!!!!!
- 用户退出了程序,有时候还能在为什么在任务管理器上看到程序运行
- 300分:有没有办法将VB程序变成桌面的一部分!在桌面上运行?
- 急急急!帮我搞定RichtextBox中英文混合输入时出现乱码的问题
- vb搞控件呐!!1
- 怎樣用PICTUREBOX来模拟文本框,我想用picture做個日期輸入框,象fox(老土)下輸入日期那樣
- 关于文本文件的操作问题?
- vb6中使用soap如何做soap数据的压缩?
- datagrid控件,如何更改表格线的色彩呀?
原始的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 program2;
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.