62,620
社区成员
发帖
与我相关
我的任务
分享
import java.util.LinkedList;
public class Test {
private LinkedList<Integer> list = new LinkedList<Integer>();
public Test(int max) {
for (int index = 1; index <= max; index++) {
list.add(index);
}
}
private void addLast() {
list.addLast(list.removeFirst());
list.removeFirst();
}
private Integer execute() {
while(list.size() > 1) {
addLast();
}
return list.get(0);
}
public static void main(String args[]) {
System.out.println(new Test(6).execute());
}
}
import java.util.Scanner;
public class RingTest{
public static void main(String[] args){
System.out.println("程序说明如下:");
System.out.println("有n个盘子,从上到下依次为1,2,3...n层叠。" +
"把第1个盘子移到第n个盘子的下面,然后扔掉第2个盘子。然后把第3个盘子移到最下面,扔掉第4个盘子..." +
"如此进行下去,直到剩下最有一个盘子,对已给定的盘子数m,求出扔出盘子的顺序以及最后剩下的盘子的序号");
//提示输入盘子的个数
System.out.println("请输入盘子的个数:");
Scanner sca=new Scanner(System.in);
int m=sca.nextInt();
//提示输入要扔掉第几个盘子,这道题是固定的,n=2
System.out.println("请输入扔出第几个盘子:");
int n=sca.nextInt();
System.out.println("按扔出盘子的次序输出序号:");
//创建有m个值的数组
int[] a=new int[m];
int[] b=new int[m];
//初始长度,以后出圈一个,长度就减一
int len=m;
//给数组赋值
for(int i=0;i<a.length;i++)
a[i]=i+1;
//i为元素下表,j代表当前要报的数
int i=0;
int j=1;
int k=0;
while(len>0){
if(a[i%m]>0){
if(j%n==0){//找到要扔出的盘子,并把盘子的个数减一
System.out.print(a[i%m]+" ");
b[k] = a[i%m];
k++;
a[i%m]=-1;
j=1;
i++;
len--;
}else{
i++;
j++;
}
}else{//遇到空位了,就跳到下一位,但j不加一,也就是这个位置没有报数
i++;
}
}
//最后剩下的盘子序号
System.out.println("");
System.out.println("最后剩下的盘子的序号为:");
System.out.println(b[k-1]);
}
}