Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 618|回复: 0

[算法学习]C语言趣味程序百例精解之JAVA实现(71):约瑟夫问题

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-11-21 00:05:10 | 显示全部楼层 |阅读模式
    C语言趣味程序百例精解之java实现:
    71.约瑟夫问题


    1. public class Josephus {
    2. public static void main(String args[]){   
    3.   if(args.length != 3) //处理参数数目不正确情况
    4.    {
    5.    System.out.println("Please Input a number!");
    6.    return;
    7.    }
    8.   int i, j, n, m,l;
    9.   n = Integer.parseInt(args[0]);//总人数
    10.   m = Integer.parseInt(args[1]);//每次报数到m
    11.   l = Integer.parseInt(args[2]);//剩下l个人不死
    12.   if (n <= 0 || m <= 0) //处理参数值不正确的情况
    13.   {
    14.     System.out.println("Paramter must bigger than zero!");
    15.     return;
    16.   }
    17.   int a[] = new int[n];
    18.   for (i = 0; i < n; i++)
    19.     a[i] = i + 1;
    20.    int k = 1;   //标识处理第k个离开的人
    21.    i = -1;    //数组下标,下一个为0,即第一个人
    22.   while (true) //k等于n表示只剩下一个人了
    23.   {
    24.    for (j = 0; j < m;) //在圈中数m个人
    25.    {
    26.     i = (i + 1) % n;
    27.     if (a[i] >0) j++; //a[i] >0表示第i个人还没有离开
    28.    }
    29.    if(k==n-l+1) break;
    30.    System.out.println("No." + a[i] + " is out!");
    31.    a[i] = -1;   //表示该人离开
    32.    k++;
    33. }
    34.    for(int t=0;t< n;t++){
    35.      if(a[t]>0)  System.out.println("No." + a[t] + " is alive!");
    36.    }
    37. }
    38. }
    复制代码
    运行结果:
      C:java>java Josephus 30 9 15
    No.9 is out!
    No.18 is out!
    No.27 is out!
    No.6 is out!
    No.16 is out!
    No.26 is out!
    No.7 is out!
    No.19 is out!
    No.30 is out!
    No.12 is out!
    No.24 is out!
    No.8 is out!
    No.22 is out!
    No.5 is out!
    No.23 is out!
    No.1 is alive!
    No.2 is alive!
    No.3 is alive!
    No.4 is alive!
    No.10 is alive!
    No.11 is alive!
    No.13 is alive!
    No.14 is alive!
    No.15 is alive!
    No.17 is alive!
    No.20 is alive!
    No.21 is alive!
    No.25 is alive!
    No.28 is alive!
    No.29 is alive! 或:
    1.   public class Test71{
    2.     public static void main(String args[]){
    3.        YueSeFu71();
    4.     }  
    5.      /**  
    6.      * 71.约瑟夫问题  
    7.      */  
    8.     public static void YueSeFu71() {   
    9.         int max = 30;   
    10.         int[] people = new int[max];   
    11.         int n = 9;   
    12.         int idx = 0;   
    13.         for (int i = 0; i < max / 2 ; i++) {   
    14.             for (int j = 0; j < n;) {   
    15.                 if (people[idx % max] == 0) {   
    16.                     j++;   
    17.                 }   
    18.                 idx++;//   
    19.             }   
    20.             idx--;   
    21.             people[(idx) % max] = i + 1;   
    22.         }   
    23.         for (int i = 0; i < max; i++)   
    24.             System.out.print(people[i] + " ");
    25.          //people[i]=0表示这人还活着,people[8]=1表示最先扔进大海,people[17]=2表示第二个扔入大海
    26.         System.out.println();   
    27.     }   
    28.   
    29. }
    30. C:at>java   Test71
    31. 0 0 0 0 14 4 7 12 1 0 0 10 0 0 0 5 0 2 8 0 0 13 15 11 0 6 3 0 0 9
    32. C:at>
    复制代码


       
         
         
          
          

            
          

            
          
         
       

      


    源码下载:http://file.javaxxz.com/2014/11/21/000510562.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-25 04:05 , Processed in 0.380028 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表