A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗中扬 中级黑马   /  2014-6-10 17:09  /  1125 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class Test7 {
  2.         /**
  3.          * 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
  4.          * 约瑟夫环问题;
  5.          * 通过分析:我们可以的到一个约瑟夫环问题的递推公式
  6.          * 递推公式   f[1]=0;
  7.      *        f[i]=(f[i-1]+m)%i;
  8.      *      (住:这个公式并不是我推出来的)
  9.          * 通个这个公式就可以很方便的秋出最后一个人,但是无法还原过程
  10.          */
  11.         public static void main(String[] args) {
  12.                 int n = 5;  //总人数
  13.                 int m  = 3;   //每次要退出的数
  14.                 int s = 0;
  15.                
  16.                 for(int i = 2;i<=n;i++){
  17.                         s= (s+m)%i;
  18.                 }
  19.                 //实际生活中编号总是从1开始,我们输出f[n]+1(也就是s+1)
  20.                 System.out.println(s+1);
  21.         }
  22. }
复制代码

4 个回复

倒序浏览
看看。。。
回复 使用道具 举报
看到过好几次这样的题目了。不过每次都没搞懂
回复 使用道具 举报
来学习了
回复 使用道具 举报
公式还没搞懂怎么来的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马