先建立一个列表,用来存储编号(假设一共有七个人)
List<Integer> list = new LinkedList<>();
for(int i=1;i<=7;i++)
list.add(i);
然后输入所需跳过的数字,并处理数字
先假设输入的数字为3
int skip = input.nextInt()-1;
int target = skip;
为什么对target
要进行一个减一操作?
列表的索引编号和数组一样,是从0
开始的。
第一个要删去的编号为3
的数据,储存在索引为2
的位置处。
为什么要对skip
进行一个减一操作?
因为在list.remove(index)
操作后,会发生后续元素继承前面元素的索引,并自动填充,所以上一个目标元素与下一个目标元素之间所差的位数变成了3-1=2
位
循环输出
while(!list.isEmpty())
{
System.out.println(list.remove(target)+" ");
target=(target+skip)%list.size();//这一步的目的与环状数组有异曲同工之妙.
}