约瑟夫环问题华为机试题
来源:互联网 发布:达芬奇调色软件下载 编辑:程序博客网 时间:2024/06/06 15:38
问题描述:
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
解决步骤:
1)、首先针对每一个孩子建立一个节点,这个节点应该包括:节点编号和下个节点的指针:
package com.hnu.domain;
/**
*这个是建立节点类
*@authormaqiang
*
*/
publicclass Child {
publicintno;
public ChildnextChild;
public Child(int no) {
this.no = no;
}
}
2)、针对这些孩子节点,我们要建立一个环形链表并且还要针对这个环形链表给出一个出 列的函数:
package com.hnu.service;
import com.hnu.domain.Child;
publicclass ChildService {
/**
*
* @param head创建一个圆环的头指针
* @param totalChild总共有多少个孩子
* @return返回一个圆环的头指针
*/
publicstatic Child createcircle(Child head,int totalChild)
{
Child currentChild=null;
for(int i=1;i<=totalChild;i++)
{
Child tmp=new Child(i);
if(i==1)
{
head=tmp;
currentChild=tmp;
currentChild.nextChild=head;
}
else
{
currentChild.nextChild=tmp;
currentChild=currentChild.nextChild;
currentChild.nextChild=head;
}
}
return head;
}
/**
* 打印出列的顺序
* @param head圆环的头指针
* @param no 第几个人出列
*/
publicstaticvoid outQueue(Child head,int no)
{
//目前节点
Child currentChild=head;
//保存前节点,为了删除出列节点,再建立链表
Child priorChild=null;
while(currentChild!=currentChild.nextChild)
{
for(int i=1;i<no;i++)
{
priorChild=currentChild;
currentChild=currentChild.nextChild;
}
System.out.print(currentChild.no+"——>");
//删除出列节点,然后从删除节点的下一节点开始数数
priorChild.nextChild=currentChild.nextChild;
//要从删除节点的下一节点开始计数,所以要把currentChild往下移动一个节点
currentChild=priorChild.nextChild;
}
System.out.print(currentChild.no);
}
}
3)、测试我们的算法是否正确:
package com.hnu.main;
import com.hnu.domain.Child;
import com.hnu.service.ChildService;
publicclass MainTest {
/**
* @param args
*/
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
Childhead=null;
Childhead_pointer=ChildService.createcircle(head, 6);
ChildService.outQueue(head_pointer, 2);
}
}
- 约瑟夫环问题华为机试题
- 华为机试题-约瑟夫问题
- 华为2014届机试题之约瑟夫环问题
- 华为2014届机试题之约瑟夫环问题
- 华为机试题(11)--约瑟夫问题
- 华为机试题: 约瑟夫问题(Java)
- 约瑟夫环—华为试题
- 华为机试---约瑟夫环问题
- 华为机试 - 约瑟夫问题
- 华为机试一道关于约瑟夫环的问题
- 华为机试——约瑟夫环问题(总结)
- 一道华为面试题的分析(约瑟夫问题)
- 华为机试.约瑟夫环
- 华为机试约瑟夫环
- 华为上机练习题--约瑟夫环问题
- 华为OJ 约瑟夫问题
- 华为机试题--排序问题
- 华为机试—约瑟夫环
- 备忘(打包和常用命令)
- 算法汇总
- gtk-query-immodules-2.0 > /usr/lib/gtk-2.0/2.10.0/gtk.immodules
- CPU 用户时间 系统时间
- 原子操作(atomic operation)
- 约瑟夫环问题华为机试题
- 实现子串查找程序 C++版(2009年华为软件设计大赛编程题)
- 【3次称12个球】12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球。
- C#多线程开发1:使用Thread类创建与启动线程
- mybatis 批量更新
- spring基础配置
- 行递增,列递增二位数组,找某个元素
- n行2n-1列动态规划
- 面试70问经典回答