一道有趣的编程题,大家都来做一做撒
将班里的 n 个人围成一圈,顺序编号。从第一个人开始报数(从 1 到 3 报数),凡报到3的人退出圈子,然后从下一个人重新开始,最后留下的那个人就被选为班长。请问按照这个规则,选出的班长是原来编号为第几号的那位.约瑟复环
搜一下很多的啦.
呵呵,昨天晚上太晚了 ,说的也不是很明白。给你看一段吧。
for(i=0;i<n;i++)
a[i]=i+1;
a[n-1]=0;
t=0//记数用的 ;
q=p=n-1;//这里的两个值其实是作为下标,同过他们的改变数组相应变化;
do{
p=a[p];
t++;
if(t%m==0)
a[q]=a[p];
else
q=p;
}
while(a[p]!=a[p])
这个只是随手写的,呆会我给你写个全的,先好好理解一下吧。其实这个挺饶的,但是一定要记住p和 q都是下标。而a[p]和a[q]才是数组值,注意下标和数组值之间的关系;
[此贴子已经被作者于2007-10-22 8:36:20编辑过]