解决方案一:使用数组,进行while持续循环
public class quit3 {
public static void main(String[] args) {
long start=System.currentTimeMillis();
Scanner scanner=new Scanner(System.in);
int m=scanner.nextInt(); //有多少个人
boolean[ ] man=new boolean[m];
for(int i=0;i<man.length;i++){
man[i]=true;
}
int t=0,len=man.length;
while(len>1){ //当len>1开始新一轮的循环,直到len=1;
for(int j=0;j<man.length;j++){
if(man[j]){
t++;
if(t==3){
t=0;
man[j]=false;
len--;
System.out.print(j+1+" "); //离开的顺序
System.out.println();
}
}
}
}
for(int z = 0; z < man.length; z++)
{
if(man[z]) //最后留下来的人没有被flase
{
System.out.println("原来剩下的数:" + (z + 1)); //i + 1 是因为数组从 0 开始
}
}
long end=System.currentTimeMillis();
System.out.println(end-start); //看下运算时间。
}
}
方案二:进行数学上的递推
public class EasyQiut3 {
public static void main(String[] args) {
long start=System.currentTimeMillis();
int Num=100000000;//100人
int m=3; //报3就离开。
int a=quit3(Num,m);
System.out.println(a);
long end=System.currentTimeMillis();
System.out.println(end-start); //和传统的比较时间
}
public static int quit3(int Num,int m){
int s=0;
for(int i=1;i<=Num;i++){
s=(s+m)%i; //转化成数学公式问题,递归
}
return s+1;
}
}
源自于博客的思考:https://blog.csdn.net/qq_37770790/article/details/79490302