Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 软件时空 > 软件相关 > java中遇到的类似约瑟夫问题
【标  题】:java中遇到的类似约瑟夫问题
【关键字】:java
【来  源】:BLOG.CSDN.NET

java中遇到的类似约瑟夫问题

Your Ad Here

暑假中学习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!");
 }
}

java中遇到的类似约瑟夫问题:【上一篇】
[收藏] 版本控制系統使用入門:【下一篇】
【相关文章】
  • 对Java克隆方法的研究(完结篇)
  • 在java中如何向oracle sp中传递自定义对象
  • 小心!Enabled和javascript10/6
  • Java语言自身的安全性问题
  • 处理正则表达式的java包:regexp
  • O'Reilly的《Java网络编程》学习笔记(InetAddress类)
  • 有感:应聘Java笔试时可能出现问题及其答案(第二版part four)
  • O'Reilly的《Java网络编程》学习笔记(URL类)
  • HOWTO: Applying a user definable font size (JAVA)
  • 用JAVA语言实现的骑士巡游(马踏棋盘)算法
  • 【随机文章】
  • 默认日志文件列表
  • 网吧LINUX应用
  • Proxy 分类
  • 编写PHP的安全策略
  • 需要这样的框架吗?
  • Windows 界面设计:拉帘按钮设计
  • 晨曦讨论组通信软件 (C/S代码)
  • 传奇世界 传奇世界私服
  • 七种常见木马的清除方法
  • 行政区划程序的设计(十)
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.