循环链表的应用_约瑟夫环

原创 2012年03月22日 18:27:30
标题: 约瑟夫环
时 限: 500 ms
内存限制: 2000 K
总时限: 3000 ms
描述:
约瑟夫环
编号为1,2,3,……,n的n个人按顺时针方向围坐一圈。任选一个正整数作为报数上限m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。设计程序输出出列顺序。
输入:
人数n 报数上限m
人员记录1 (格式为:姓名 学号 性别 年龄 班级 健康状况)
人员记录2
人员记录n
输出:
第1次报数出列的人员记录
第2次报数出列的人员记录
第n次报数出列的人员记录
#include <iostream>

using namespace std;

typedef struct _Node
{
    string name;
    string no;
    string gender;
    int age;
    string classno;
    string health;
    struct _Node *Next;
}Node;

int getinfo(Node *stu)
{
    cin>>stu->name;
    cin>>stu->no;
    cin>>stu->gender;
    cin>>stu->age;
    cin>>stu->classno;
    cin>>stu->health;
    return 0;
}

int printinfo(Node *stu)
{
    cout<<stu->name<<" "<<stu->no<<" "<<stu->gender<<" "<<stu->age<<" "<<stu->classno<<" "<<stu->health<<endl;
    return 0;
}

int main()
{
    int totalnum, upno;
    string _name;
    cin>>totalnum>>upno;
    //creat head node
    Node *head,*s,*p,*q;
    head=new Node;
    getinfo(head);
    p=head;
    p->Next=p;
    //insert other node
    for (int i=2;i<=totalnum;i++)
    {
        s=new Node;
        getinfo(s);
        s->Next=p->Next;
        p->Next=s;
        p=p->Next;
    }
    p=q=head;
    int currno=totalnum;
    while(currno!=1)
    {
        for(int j=1;j<upno;j++)
        {
            p=p->Next;//p direct the node to be deleted
        }
        printinfo(p);
        while(q->Next!=p)
        {
            q=q->Next;//q is the pre node of p
        }
        //delete p
        q->Next=p->Next;
        //store p
        s=p;
        //move p to the next position
        p=p->Next;
        delete(s);
        currno--;
    }
    printinfo(p);
    delete(p);
    //printinfo(head);
    return 0;
}


约瑟夫环问题(循环链表)

华为上机题,约瑟夫环,循环链表
  • wenhai_zh
  • wenhai_zh
  • 2013年07月29日 19:02
  • 18062

java循环链表实现约瑟夫环问题

文章主要用循环链表实现了约瑟夫环问题。约瑟夫环问题详细问题可以百度。...
  • mz690048mz
  • mz690048mz
  • 2015年11月19日 19:44
  • 771

循环链表的简单应用(约瑟夫环问题场景)

题目:已知n
  • yejun556688
  • yejun556688
  • 2014年07月30日 21:08
  • 685

循环单链表实现约瑟夫环问题

问题: 编号为1,2,3,,,n的n个人按顺时针围坐一起,每人有一个正整数密码。一开始任选一个整数作为报数上限值m,从第一个人开始按顺时针向自1开始顺序报数,报到m的停止,出列,并把出列的人手中的密码...
  • SAYA_
  • SAYA_
  • 2015年10月19日 13:40
  • 1586

用单向循环链表解决约瑟夫环(Joseph)问题

约瑟夫环(Joseph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始人选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数...
  • qq_23233049
  • qq_23233049
  • 2015年04月09日 15:29
  • 3493

Java循环链表实现约瑟夫环

问题描述: 约瑟夫环运作如下: 1、一群人围在一起坐成[2]  环状(如:N) 2、从某个编号开始报数(如:K) 3、数到某个数(如:M)的时候,此人出列,下一个人重新报数 4、一直循环,直...
  • wangshuang1631
  • wangshuang1631
  • 2016年10月11日 21:42
  • 2451

循环链表解决约瑟夫环问题

约瑟夫环是一个经典的数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此...
  • jw903
  • jw903
  • 2014年08月31日 20:14
  • 3378

Java循环链表实现约瑟夫环

* 单向循环链表形成约瑟环
  • chx0501
  • chx0501
  • 2015年09月27日 17:03
  • 2009

C语言实现约瑟夫环,使用循环单链表和循环数组2种方法

使用C语言实现约瑟夫环,循环单链表和循环数组2种方法。
  • fengjunwang1980
  • fengjunwang1980
  • 2016年06月21日 22:26
  • 1967

链表初解(三)——约瑟夫环之循环链表实现

约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开 始报数,数到m的那个人又出列;依此规...
  • u012904198
  • u012904198
  • 2014年03月29日 01:54
  • 2000
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:循环链表的应用_约瑟夫环
举报原因:
原因补充:

(最多只允许输入30个字)