java中遇到的类似约瑟夫问题
2005-10-08 00:04
489 查看
暑假中学习java过程中遇到的类似的约瑟夫问题,由于java没有指针, 所以有数组实现.
/*问题描述:
*假设M位食客围坐圆桌边,按顺时针依次编号。从begin(begin<=M)号食客开始按顺时针不断报数,
*报数时依次从1~N,报到N的食客离席,由下位食客继续从1开始报数,最后留下的那位请客。
*例如M=5,N=3,begin=1时,将由4号食客请客;M=5,N=3,begin=1时,将由1号食客请客。(N不一定小于M)
*
*程序主要运用数组进行模拟,通过不断的循环,实现数组中只有一个元素不为0,则该元素的值就是
*食客的编号。
*该问题类似约瑟夫问题,这是不用C++中的结构类型和指针来实现的一种代码。
*Finish at 2005/08/06
*/
import java.io.*;
public class RoundTable{
public static void main(String args[]){
//M表示人数
int M;
//N表示报数得最大值
int N;
//begin表示开始报数的位置
int begin;
//进入循环,当用户输入M的值小于0时,退出
while(true){
try{
System.out.println("if you want to end the program,you should initialize the M
<=0");
System.out.print("Please input the M:");
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String input0=in.readLine();
M=Integer.parseInt(input0);
if(M<=0)break;//当M<=0,退出
System.out.print("Please input the N:");
String input1=in.readLine();
N=Integer.parseInt(input1);
System.out.print("Please input the begin:");
String input2=in.readLine();
begin=Integer.parseInt(input2);
}catch(Exception exc){
System.out.println("Input Error!");
continue;
}if(N<=0||begin<=0){
System.out.println("N or begin can't be the NEGATIVE!");
continue; //当N或begin小于0时,重新输入
}
//创建一个长度为M的数组
int []array=new int[M];
//初始化数组,使数组元素的值为1~M
for(int i=0;i<M;i++){
array[i]=i+1;
}
//声明变量count1,count2作为计数器
int count1,count2,check=0;
count1=1;
//count2的值初始化为开始的位置
count2=begin;
//进入循环,直到check=M-1
while(true){
if(count1%N==0&&array[count2-1]!=0){
array[count2-1]=0;
check++;
}
count2++;
if(count2>M)count2=count2-M;
if(array[count2-1]!=0)count1++;
if(M-check==1)break;
}
//输出
for(int i=0;i<M;i++){
if(array[i]!=0)System.out.println("该由第"+array[i]+"食客请客!");
}
}
System.out.println("The End!/nThank You For Using!");
}
}
/*问题描述:
*假设M位食客围坐圆桌边,按顺时针依次编号。从begin(begin<=M)号食客开始按顺时针不断报数,
*报数时依次从1~N,报到N的食客离席,由下位食客继续从1开始报数,最后留下的那位请客。
*例如M=5,N=3,begin=1时,将由4号食客请客;M=5,N=3,begin=1时,将由1号食客请客。(N不一定小于M)
*
*程序主要运用数组进行模拟,通过不断的循环,实现数组中只有一个元素不为0,则该元素的值就是
*食客的编号。
*该问题类似约瑟夫问题,这是不用C++中的结构类型和指针来实现的一种代码。
*Finish at 2005/08/06
*/
import java.io.*;
public class RoundTable{
public static void main(String args[]){
//M表示人数
int M;
//N表示报数得最大值
int N;
//begin表示开始报数的位置
int begin;
//进入循环,当用户输入M的值小于0时,退出
while(true){
try{
System.out.println("if you want to end the program,you should initialize the M
<=0");
System.out.print("Please input the M:");
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String input0=in.readLine();
M=Integer.parseInt(input0);
if(M<=0)break;//当M<=0,退出
System.out.print("Please input the N:");
String input1=in.readLine();
N=Integer.parseInt(input1);
System.out.print("Please input the begin:");
String input2=in.readLine();
begin=Integer.parseInt(input2);
}catch(Exception exc){
System.out.println("Input Error!");
continue;
}if(N<=0||begin<=0){
System.out.println("N or begin can't be the NEGATIVE!");
continue; //当N或begin小于0时,重新输入
}
//创建一个长度为M的数组
int []array=new int[M];
//初始化数组,使数组元素的值为1~M
for(int i=0;i<M;i++){
array[i]=i+1;
}
//声明变量count1,count2作为计数器
int count1,count2,check=0;
count1=1;
//count2的值初始化为开始的位置
count2=begin;
//进入循环,直到check=M-1
while(true){
if(count1%N==0&&array[count2-1]!=0){
array[count2-1]=0;
check++;
}
count2++;
if(count2>M)count2=count2-M;
if(array[count2-1]!=0)count1++;
if(M-check==1)break;
}
//输出
for(int i=0;i<M;i++){
if(array[i]!=0)System.out.println("该由第"+array[i]+"食客请客!");
}
}
System.out.println("The End!/nThank You For Using!");
}
}
相关文章推荐
- java 防盗链详解及解决办法(针对类似帆软报表第三方可能遇到的问题)
- 输出空白字符对于cin提取输入流遇到空格的问题Strut2教程-java教程
- Android开发遇到的坑(1):Java中List的安全删除问题
- java JPA入门以及遇到的问题
- Android开发遇到的坑(1):Java中List的安全删除问题
- 使用myeclipse将Java项目打成jar包遇到classnotfound的问题解决办法
- JAVA WEB START 在项目中遇到的问题及解决
- 遇到的问题-----java The type java.lang.String cannot be resolved. It is indirectly referenced fr
- java项目中遇到的问题及解决办法002
- 遇到问题---java--hibernate多线程中使用getCurrentSession报错innerSetException
- java开发中经常遇到的问题
- java面试时遇到的一个有意思的小问题
- 2007年11月10日 我会把我学JAVA过程中遇到的问题都一一写在博客上
- PHP5 在调用 JAVA WebService 时遇到的各种问题及解决方法(一)
- Java使用Socket传输文件遇到的问题(转)
- Java编译和Tomcat启动遇到的一些问题
- Java与Android开发环境配置以及遇到的问题解决
- Java regex正则表达式类似死循环问题
- 使用Java8过程中遇到的问题
- 约瑟夫问题(丢手帕问题)的java实现