package java50ti;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class No10 {
//约瑟芬环 游戏:有n个人站成一个圈,标上号1-n:从第一个开始报数,数到m,就拖出去杀掉,下一位从一开始数,数到m杀掉,问最后一个人的标号是多少,
//下面有两个方法
//方法2是正确的,方法只能满足小数据,大一点的就异常了。求大神帮我改一下,看我的打印信息就知道我的思路了。
public static void main(String[] args) {
// TODO Auto-generated method stub
//经测试,输入: 6 3
//12 4都成功,输入大了就不行了,比如54 12就报错了,求帮我修改一下
Scanner scanner = new Scanner(System.in);
System.out.print("请输入总人数:");
int totalNum = scanner.nextInt();
System.out.print("请输入报数的大小:");
int cycleNum = scanner.nextInt();
yuesefu1(totalNum, cycleNum);
System.out.println("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
yuesefu2(totalNum, cycleNum);
}
public static void yuesefu1(int t ,int p)
{
//首先我把这些人给放到数组里面,方便操作
List l = new ArrayList();
for(int i=1;i<=t;i++)
{
l.add(i);
}
System.out.println(l.size());
int wei =p;
while(l.size()>1)
{
if(l.size()==p)
{
System.out.println("等于p");
System.out.println("删掉"+l.get(p-1));
l.remove(p-1);
}if(l.size()<p)
{
System.out.println("小于p");
System.out.println("删掉"+l.get(p-l.size()-1));
l.remove(l.get(p-l.size()-1));
System.out.println("---------------------------------");
for(int k = 0;k<l.size();k++)
{
System.out.print(l.get(k)+".");
}
System.out.println("---------------------------------");
}
else{
//先删除一个p位置的
l.remove(p-1);
//---------------------------------
System.out.println("---------------------------------");
for(int k = 0;k<l.size();k++)
{
System.out.print(l.get(k)+".");
}
System.out.println("---------------------------------");
//---------------------------------
for(int j=0;j<p-1;j++)
{
l.add(l.get(j));
}
//---------------------------------
System.out.println("---------------------------------");
for(int k = 0;k<l.size();k++)
{
System.out.print(l.get(k)+".");
}
System.out.println();
System.out.println("---------------------------------");
//---------------------------------
for(int j=0;j<p-1;j++)
{
l.remove(0);
}
//---------------------------------
System.out.println("---------------------------------");
for(int k = 0;k<l.size();k++)
{
System.out.print(l.get(k)+".");
}System.out.println();
System.out.println("---------------------------------");
}
}
System.out.println("最后的:"+l.get(0));
}
public static void yuesefu2(int t,int p)
{
List list = new ArrayList();
for(int i=1;i<=t;i++)
{
list.add(i);
}
int k=0;
while(list.size()>0)
{
k = k+p;
k= k%(list.size())-1;
System.out.print("k="+k+"值为:");
if(k<0)
{
System.out.println(list.get(list.size()-1));
list.remove(list.size()-1);
k=0;
}else
{
System.out.println(list.get(k));
list.remove(k);
}
}
}
}