问题描述
6.有100个人围成一个圈(编号0-99),从第0号的人开始从1报数,凡报到3的倍数的人离开圈子,然后再数下去,直到最后只剩一个人为止,问此人原来的位置是多少号?(最好在有些重要的语句的时候附上点注释,谢啦!)
解决方案
解决方案二:
小弟在线等!
解决方案三:
publicstaticvoidmain(String[]args){//初始化0-99个人List<Integer>personList=newLinkedList<Integer>();for(inti=0;i<99;i++){personList.add(i);}//从1报数直到只有一个人intcounter=1;intindex=0;while(personList.size()>1){//如果超出链表最后回到链表开始if(index==personList.size()){index=0;}if(counter%3==0){personList.remove(index);}else{index++;}counter++;}System.out.println(personList);}
解决方案四:
Listlist=newArrayList();publicstaticvoidmain(string[]args){init();System.out.println(countOff(list).get(0));}//初始化publicvoidinit(){for(inti=0;i<100;i++)list.add(i);}//递归publicListcountOff(Listlist){if(list.size()<3)returnlist;//小于3人,返回for(inti=0;i<list.size();i++){if((i+1)%3==0)list.removeAt(i);//循环删除}returncountOff(list);//继续下一轮}
解决方案五:
publicstaticintlastValue(Listlist,intn){while(true){if(list.size()==1)break;for(inti=0;i<n-1;i++){list.add(list.remove(0));}list.remove(0);}return(Integer)list.get(0);}
解决方案六:
有点问题,应该是100:publicstaticvoidmain(String[]args){//初始化0-99个人List<Integer>personList=newLinkedList<Integer>();for(inti=0;i<100;i++){personList.add(i);}//从1报数直到只有一个人intcounter=1;intindex=0;while(personList.size()>1){//如果超出链表最后回到链表开始if(index==personList.size()){index=0;}if(counter%3==0){personList.remove(index);}else{index++;}counter++;}System.out.println(personList);}
解决方案七:
题目有误怎么可能是只有一个人奇数为3最少有2个人留下来的
解决方案八:
引用6楼wyq2318032的回复:
题目有误怎么可能是只有一个人奇数为3最少有2个人留下来的
这个没有问题。。。你理解有误。。假如只剩下2个人第一个人喊了1第二个人喊了2接着就是第一个人喊3那么他出去那么就剩下第二个人了。
解决方案九:
+引用6楼wyq2318032的回复:
题目有误怎么可能是只有一个人奇数为3最少有2个人留下来的
解决方案十:
importjava.util.LinkedList;/***1、循环递归调用的效率是很低的*2、list增删的效率是很低的*为了便于维护,一定要抽象成现实的对象和现有的逻辑。*@authorSugar.Tan*/publicclassPeapleArrayTest{publicstaticvoidmain(String[]args){//一个链表,用于装peaple.LinkedListllPeaple=newLinkedList();intiCallingNumber=0;//报数号intiPoint=-1;//指针,指向正在报数的人;注意链表的索引是从0开始的。PeaplepCallingPeaple=null;//正在报数的那个人//init初使化链表,装进100个人for(inti=0;i<100;i++){llPeaple.addLast(newPeaple(i));}//从0号开始报数pCallingPeaple=(Peaple)llPeaple.getFirst();while(llPeaple.size()>1){iPoint++;iCallingNumber++;if(iCallingNumber%3==0){llPeaple.remove(iPoint);//到3的倍数的人离开圈子iPoint--;}//如果到链表最后一个元素,指针指回链表的第一个元素之前。if(iPoint==llPeaple.size()-1){iPoint=-1;}}//endwhileSystem.out.print("此人原来的位置是");System.out.print(((Peaple)llPeaple.get(0)).getINumber());System.out.print("号");}}//一个普通的JavaBeanclassPeaple{privateintiNumber;//构造函数publicPeaple(intiNumber){this.iNumber=iNumber;}//gettersandsettersmethodpublicintgetINumber(){returniNumber;}publicvoidsetINumber(intnumber){iNumber=number;}}
解决方案十一:
引用5楼blazingfire的回复:
有点问题,应该是100:Javacodepublicstaticvoidmain(String[]args){//初始化0-99个人List<Integer>personList=newLinkedList<Integer>();for(inti=0;i<100;i++){……
顶!