有10个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号那位。
看到这道题我首先想到的是用约瑟夫环来解决这道题,但是实在是很复杂,其实,是有简单的方法的,我们先来看一下:
可以看出,最后剩下的是3,就是开始位于第四个位置上的人。
这道题其实是不需要数据结构的,十个人可以写成长度为10的整形数组,首先给每个人编号,每报一次数都会退出一个人,所以需要一个报数标志,代表已经退出,将报数的过程一直重复,直到剩下最后一个人为止。
package www.bit.java;
/**
* 有10个人围成一圈,顺序排号。
* 从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,
* 问最后留下的是原来第几号那位。
*/
public class practice1 {
public static void main(String[] args) {
int[] people = new int[10];
//编号
for(int i = 0; i < 10; i++){
people[i] = i+1;
}
//报数标志
int flag = 0;
//退出人数
int quitPeople = 0;
//计数
int i = 0;
while(quitPeople < 9){
if(people[i] != 0){
//该编号的人还在圈中