题目描述:
有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); } } } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/zzc8265020/article/details/46858895