[分享]约瑟夫环的问题_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
3
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 12511 | 回复: 2   主题: [分享]约瑟夫环的问题        下一篇 
    本主题由 红与黑 于 2013-2-28 16:46:54 置为精华
root
注册用户
等级:中尉
经验:470
发帖:31
精华:1
注册:2013-2-22
状态:离线
发送短消息息给root 加好友    发送短消息息给root 发消息
发表于: IP:您无权察看 2013-2-25 11:00:02 | [全部帖] [楼主帖] 楼主

【约瑟夫环的问题】
有17个人(编号从0到16),按编号依次排列成一个圆环(编号16的接着编号为0 的人),从编号为0 的人开始报数,数到3的人退出圆环,如此循环,最后留下的那个人的编号是什么?

0,1,2,3,4,5,6,7,8,,9,10,11,12,13,14,15,16


要求:请用面向对象的思想来处理这个问题并在下面写出具体的代码(可以选择你熟悉的语言,如java/C++/C#等)
代码如下:

public class Josephus {
      /**

*
自己的编号

*/
      private final int number;
      /**

*
链表指针

*/
      private Josephus previous;
      /**

*
链表指针

*/
      private Josephus next;
      /**

*
创建一个新的<code>Josephus</code>对象。

*

* @param number

*
自己的编号

*/
      public Josephus(int number) {
            this.number = number;
      }
      /**

*
返回 <code>number</code> 的当前值。

*

*
@return <code>number</code> 的当前值

*/
      public int getNumber() {
            return number;
      }
      /**

*
返回 <code>previous</code> 的当前值。

*

*
@return <code>previous</code> 的当前值

*/
      public Josephus getPrevious() {
            return previous;
      }
      /**

*
设置 <code>previous</code> 的当前值。

*

*
@param previous
*
<code>previous</code> 的当前值

*/
      public void setPrevious(Josephus previous) {
            this.previous = previous;
      }
      /**

*
返回 <code>next</code> 的当前值。

*

*
@return <code>next</code> 的当前值

*/
      public Josephus getNext() {
            return next;
      }
      /**

*
设置 <code>next</code> 的当前值。

*

*
@param next
*
<code>next</code> 的当前值

*/
      public void setNext(Josephus next) {
            this.next = next;
      }
      /**
      *


从自己开始报数,报到的人被踢走。

*
*
@param n
*


报的数字

*
@return 被踢走的人
*
/
public Josephus startCountingOut(int n) {
      Josephus current = this;
      for (int i = 1; i < n; i++) {
            current = current.getNext();
      }
      return current.countOut();
}
/**
*


从自己开始报3个数,报到的人被踢走。

*
*
@return 被踢走的人
*
/
public Josephus startCountingOut() {
      return startCountingOut(3);
}
/**
*


被报到,而被踢走

*
*
@return 被踢走的人
*
/
private Josephus countOut() {
      previous.setNext(next);
      next.setPrevious(previous);
      return this;
}
@Override
public String toString() {
      StringBuilder buff = new StringBuilder(64);
      buff.append("Josephus");
      buff.append("\nNum: ").append(number);
      buff.append("\nPrev: ").append(previous.getNumber());
      buff.append("\nNext: ").append(next.getNumber());
      return buff.toString();
}
public static Josephus init(int n) {
      Josephus[] arrays = new Josephus[17];
      for (int i = 0; i < arrays.length; i++) {
            arrays[i] = new Josephus(i);
      }
      for (int i = 0; i < arrays.length; i++) {
            arrays[i].setNext(arrays[(i + 1) % n]);
            arrays[i].setPrevious(arrays[(i + n - 1) % n]);
      }
      return arrays[0];
}
public static void main(String[] args) {
      Josephus j = init(17);
      do {
            System.out.println("报数的人:");
            System.out.println(j);
            j = j.startCountingOut();
            System.out.println("被踢���的人:");
            System.out.println(j);
            // 移交给下一个人
            j = j.getNext();
      } while ((j.getNext()) != j); // 就他一个了
      System.out.println("最后的幸存者:");
      System.out.println(j);
}
}


该贴被root编辑于2013-2-25 11:07:02




赞(0)    操作        顶端 
guoyongwei
注册用户
等级:少校
经验:910
发帖:52
精华:6
注册:2013-3-11
状态:离线
发送短消息息给guoyongwei 加好友    发送短消息息给guoyongwei 发消息
发表于: IP:您无权察看 2013-3-13 15:42:03 | [全部帖] [楼主帖] 2  楼

<form action="send.php" method="post">

<input type="hidden" name="mail" value="someone@somewhere.com">

<input type="text" name="name">

<input type="submit" value="submit">

</form>



赞(0)    操作        顶端 
guoyongwei
注册用户
等级:少校
经验:910
发帖:52
精华:6
注册:2013-3-11
状态:离线
发送短消息息给guoyongwei 加好友    发送短消息息给guoyongwei 发消息
发表于: IP:您无权察看 2013-3-13 15:48:32 | [全部帖] [楼主帖] 3  楼

</html>

<head>

<title>

My Exp

</title>

</head>

<body>

<script type="text/javascript">

alert("哈哈~!");

</script>

</body>

<html>



赞(0)    操作        顶端 
总帖数
3
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论