有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号。
本程序使用链表类,原因:链表的插入、删除操作方便,效率高。
算法:
* 1、使用链表类
* 2、使用循环,循环条件为链表大小大于1,等于1时即为最后一位
* 3、移除前两个元素到链表末尾
* 4、删除第三个元素
package pack2;
import java.util.LinkedList;
import java.util.Scanner;
public class Loop {
public static void main(String[] args) {
try (Scanner input = new Scanner(System.in);){
System.out.print("Enter the amount of children: ");
int amount = input.nextInt();
process(amount);
}
}
/**
* 算法:
* 1、使用链表类
* 2、使用循环,循环条件为链表大小大于1,等于1时即为最后一位
* 3、移除前两个元素到链表末尾
* 4、删除第三个元素
**/
public static void process(int amount) {
LinkedList<Integer> linkedList = new LinkedList<>(); //创建一个链表对象
for (int i = 0; i < amount; i++)
linkedList.addLast(i+1); //链表添加值
while(linkedList.size() > 1) {
linkedList.addLast(linkedList.removeFirst()); //移除的第一个元素添加到末尾
linkedList.addLast(linkedList.removeFirst()); //移除的第二个元素添加到末尾
linkedList.removeFirst(); //移除第三个元素
}
System.out.println("The number of the last one is: "+linkedList.removeFirst());
}
}