题目描述:
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出,问最后留下的那位是原来第几号。
解题思路:
用list存储姓名,看谁剩到最后一个.在list长度遍历一次,如果是3的倍数则退出,同时记录队尾报数,然后再以现在的list报数,以此类推。
代码如下:
public class baoshu
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
while (sc.hasNext())
{
int input=sc.nextInt();
List<Integer> list=new ArrayList<Integer>();
for (int i = 1; i <= input; i++)
{
list.add(i);
}
bao(list,0,3);
}
sc.close();
}
public static void bao(List<Integer> list,int mod,int num)
{
int count=0;
num=3;
int size=list.size();
for (int i = 0; i < size; i++)
{
if (1==list.size())
{
System.out.println(list.get(0));
return;
}
if ((i+1+mod)%num==0)
{
list.remove(i-count);
count++;
}
if (i==size-1)
{
mod=size%num+mod;
bao(list,mod,num);
}
}
}
}