1.问题提出
有100个小朋友按编号顺序1,2,。。。,100逆时针方向围成一圈。从1号开始逆时针方向1,2,。。。,9报数,凡报数9者出列(显然,第一个出圈为编号9者)。
最后剩下一个未出圈者的编号是多少?第50个出圈者的编号是多少?
2.设计要点
圆圈循环报数问题称为Joseph问题。我们考虑一般问题:有n个小朋友按编号顺序1,2,。。。,n逆时针方向围成一圈。从1号开始按逆时针1,2,。。。,m报数,凡报数m者出列。
求最后剩下一个未出圈者的编号与指定第p个出圈者的编号。
设置数组a(n),每一数组元素赋初值1,每报一人,和变量s增1。当加a(i)后和变量s的值为m时,a(i)=0,标志编程为i者出圈,设置ln统计出圈人数。同时,s=0并重新逆时针方向后报数累加。
当出圈人数ln为指定的p时,x=i,x即为第p个出圈者的编号。
当出圈人数ln达到n-1时,即未出圈者只剩1人,终止报数,打印最后剩下者的编号。
3.代码实现