题题69-69-类约瑟夫环问题类约瑟夫环问题有有nn个人围成一圈,顺序排号
从第一个人围成一圈,顺序排号
从第一个人开始报数(从个人开始报数(从11到到33报数),凡报报数),凡报到到33的人退出圈子,问最后留下的是的人退出圈子,问最后留下的是原来第几号的那位
原来第几号的那位
1210548769n3如何来确定人出局的顺序如何实现最后一位数完又从第一位开始数的问题如何判断某人是否出局流程图代码•如何来确定人出局的顺序
如何来确定人出局的顺序
我们可以把点名看成是不重复的,比如,有我们可以把点名看成是不重复的,比如,有NN个人,个人,第一轮后剩第一轮后剩N1N1个人、第二轮剩个人、第二轮剩N2N2个人……以此类推;个人……以此类推;那么,第二轮的地那么,第二轮的地MM个人可以看做第个人可以看做第N+MN+M次被点名
因此被淘汰的总是能被因此被淘汰的总是能被33整除的
如何实现最后一位数完又从第一位开始如何实现最后一位数完又从第一位开始数的问题
很简单,我们可以用模运算(很简单,我们可以用模运算(%%)来完成
比如:比如:1%3=11%3=1;;2%3=2;3%3=0;4%3=2%3=2;3%3=0;4%3=11
因此我们可以用因此我们可以用j=i%n+1j=i%n+1((jj表示人的序号,表示人的序号,nn表示场上还剩的人数,表示场上还剩的人数,ii表示点名表示点名次数次数))来实现上述循环来实现上述循环如何判断某人是否出局如何判断某人是否出局我们可以用数组我们可以用数组a[j]a[j]来表示每个人,下标来表示每个人,下标jj表示他的序号,数组元素的值组表示表示他的序号,数组元素的值组表示他在场与否,比如:他在场与否,比如:a[j]=0a[j]=0表示他已出局表示他已出局;a[j]=1;a[j]=1表示他还在场
表示他还在场