约瑟夫环问题的算法JAVA版
import java.util.*;
import java.io.*;
public class NoendSeat
{
static LinkedList list=new LinkedList();
public String GetString()
{
int b;
String str=null;
int n=-1;
byte buffer[]=new byte[10];
try
{
b=System.in.read(buffer);
ByteArrayInputStream in=new ByteArrayInputStream(buffer);
byte tom[]=new byte[10];
while((n=in.read(tom,0,10))!=-1)
{
str=new String(tom,0,tom.length).trim();
}
in.close();
}
catch(IOException e)
{
System.out.println(e);
}
return new String(str);
}
public void CreatList(int length)
{
for(int i=1;i<=length;i++)
{
list.add(i);
}
}
public void ChoiceSelect(LinkedList list,int length,int startloc)
{
int count=0;
int index[]=new int[length];
int num[]=new int[length];
int start=0;
int begin=0;
try
{
for(int i=startloc-1;i<list.size();i+=startloc)
{
list.set(i,0);count=i;
}
for(int j=list.size()-1;j>count;j--)
{
index[start++]=(int)list.get(j);
list.set(j,0);
}
for(int k=0;k<start;k++)
{
list.addFirst(index[k]);
}
for(int i=0;i<list.size();i++)
{
if(list.get(i)!=0)
num[begin++]=(int)list.get(i);
}
list.clear();
for(int j=0;j<begin;j++)
{
list.add(num[j]);
}
}
catch(Exception e){}
while(list.size()>=startloc)
ChoiceSelect(list,length,startloc);
}
public void ShowList(LinkedList list)
{
for(int j=0;j<list.size();j++)
{
System.out.println("第"+list.get(j)+"位");
}
}
public static void main(String arg[])
{
NoendSeat ns=new NoendSeat();
System.out.println("--->游戏开始了,看谁是幸运之星");
System.out.println("**********************************");
System.out.println("--->输入参与自杀行动的人数:");
String str=ns.GetString();
int length=Integer.parseInt(str);
System.out.println("--->输入自杀间隔人数:");
String tap=ns.GetString();
int tapnum=Integer.parseInt(tap);
ns.CreatList(length);
System.out.println("--->不死位置<LUCK SEAT>是:");
ns.ChoiceSelect(list,length,tapnum);
ns.ShowList(list);
System.out.println("*********************************");
System.out.println("--->游戏结束");
}
}
评论0