有n个人按1,2,3,...,n顺序编号围坐一圈,从第1个人开始按1,2,3...,m报数,凡报到m的人退出圈子,如此循环报数,直到圈内只剩一人,问最后留下的是原来第几号的那位。编写程序实现上述过程,n和m由键盘依次输入!!!!!!!!!!!!!!!!!!!!!!!!!!!!
參考答案:简单的写了一下,编译通过。不过说实在的,你的悬赏分太低了!
import java.io.*;
/** class J_JosePhus: The main class of this program */
public class J_Josephus
{
/** Method: mb_Josephus: It is used to calculate "Josephus Problem */
public int mb_Josephus(int num_person, int num_count)
{
int tempIndex = 0, counted = 1;
J_Person tempPerson;
if(num_person <= 0 || num_count <= 0) {
System.out.println("无效参数!");
System.exit(2);
}
J_Person[] persons = new J_Person[num_person];
if(num_count == 1)
return num_person;
else {
for(int i = 0; i < num_person; i++)
{
persons[i] = new J_Person();
persons[i].setIsInRing(true);
if(i != num_person - 1)
persons[i].setNextPerson(i+1);
else
persons[i].setNextPerson(0);
}
while(true)
{
if(persons[tempIndex].getNextPerson() == tempIndex)
break;
tempPerson = persons[tempIndex];
tempIndex = tempPerson.getNextPerson();
counted++;
if(counted == num_count) {
persons[tempIndex].setIsInRing(false);
tempIndex = persons[tempIndex].getNextPerson();
tempPerson.setNextPerson(tempIndex);
counted = 1;
}
}
return (tempIndex+1);
}
}// End of method: mb_Josephus
public static void main(String[] args)
{
int m = 0, n = 0, val;
String[] str = new String[2];
System.out.println("依次输入m值与n值。");
try {
for(int i = 0; i < 2; i++)
{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
str[i] = in.readLine();
}
m = Integer.parseInt(str[0]);//m is the number of the persons
n = Integer.parseInt(str[1]);//n is the last figure
}
catch(Exception e) {
System.err.println("无效参数!");
System.exit(1);
}
J_Josephus app = new J_Josephus();
val = app.mb_Josephus(m, n);
System.out.println("根据您的输入,共有"+m+"个人,数到"
+n+"时进行淘汰\n第"+val+"个人是最终的幸运儿");
}// End of method: main
}// End of class: J_Josephus
/** class J_Person: It is used to represent a child */
class J_Person
{
private boolean isInRing;
private int nextPerson;
public boolean getIsInRing()
{
return isInRing;
}
public int getNextPerson()
{
return nextPerson;
}
public void setIsInRing(boolean isInRing)
{
this.isInRing = isInRing;
}
public void setNextPerson(int nextPerson)
{
this.nextPerson = nextPerson;
}
}// End of class: J_Person